身為一名網路圖文創作者,常常需要將其他照片格式轉為JPG並調整照片寬度,搜尋網路上免費的PNG2JPG Converter都有諸多限制,讓我苦惱許久。於是我決定寫一個相片批次轉檔工具,雖然我不是很精通程式語言,但逐步列出做法再針對性的搜尋語法,用Python搭配OpenCV寫一個簡單的批次相片轉檔工具也不是不可能。這個相片批次轉檔工具除了可以大量改變相片檔案類型外,也能夠等比例縮放圖片至想要的大小,在部落格照片的快速處理上有非常大的幫助。如果想直接看完整程式碼的,可以透過目錄的超連結直接跳轉,這篇我會記錄我撰寫的過程,以便之後複習使用。有需要者也可以自行取用。
內容索引
Toggle程式目標設定
- 將照片從PNG轉成JPG
- 將照片從任意長寬轉成自己設定的長寬
- 批次處理
- 不影響到原始檔案
撰寫思路
項目 | 說明 | 相關語法 |
---|---|---|
輸入設定 | 圖片所在的資料夾位置 | input (str) |
檔案類型 | input (str) | |
欲變更成的檔案類型 | input (str) | |
欲修正的圖片寬度 | input (int) | |
檔案偵測 | 將資料夾內的圖片路徑導入 | glob.glob(______) |
將圖片的路徑、檔名、類型分離以便處理 | glob.glob(______) | |
建立一個空List | [] | |
將圖片的檔名重新依序命名為1,2,3…並放入空List,以便迴圈作批次處理 | for list.append os.rename |
|
圖片調整 | 將原始圖片寬度和高度叫出 | cv2.imread img.shape |
根據修正的圖片寬度可得與原始圖片寬度之間所差的比例 | 四則運算 | |
依照比例縮放原始圖片長寬 | 四則運算 | |
圖片儲存 | 將修正的圖片重新儲存為欲變更的檔案格式 | cv2.imwrite |
將圖片檔名被更改為1,2,3…的圖片以舊的檔案名稱覆蓋 | os.rename | |
跳出執行完成通知 |
根據列出的程式,需要確認Anaconda的Python編譯器有安裝cv2、os和glob三種軟體包。
程式效果
執行運算之後,Console視窗會出現輸入提示,依次輸入檔案所在的資料夾路徑、原始檔案格式、欲轉換成的檔案格式,以及想改變成的照片寬度,按下Enter後快速批次處理完畢,跳出修正完成的提示。
檔案路徑不可有中文或特殊符號。
再到實際資料夾查看情況,原本三張PNG照片,經過程式處理後另存了三張調整後的JPG照片,查看照片寬度為輸入值1200px,如此大小和格式放在部落格時更適合閱讀。當然也可以調整其他格式的照片,以及不大的長寬。這樣一個簡單的程式卻非常實用呢!
完整程式碼
import cv2 import os import glob folderpath = input('■資料夾路徑(不可有中文):') + '\\' originalformat = str(input('■原檔案格式(大小寫一致): .')) newformat = str(input('■欲變更檔案格式: .')) resize_width = int(input('■欲變更檔案整數寬度(px):')) filepath = glob.glob(folderpath + '*.' + str(originalformat)) SLfilelist = [] n = 0 for i in filepath: SLfilelist.append(os.path.splitext(os.path.basename(filepath[n]))[0]) n = n + 1 n = 0 for i in SLfilelist: oldpath = folderpath + SLfilelist[n] + '.' + str(originalformat) newpath = folderpath + str(n + 1) + '.' + str(originalformat) os.rename(oldpath, newpath) img = cv2.imread(newpath) ratio = img.shape[0] / img.shape[1] resize_height = round(resize_width * ratio) img_resize = cv2.resize(img, (resize_width, resize_height)) cv2.imwrite (str(folderpath) + str(newformat) + '_version_' + str(SLfilelist[n]) + '.' + str(newformat), img_resize) os.rename(newpath, oldpath) n = n + 1 print("\n■修正完成!")
Python學習紀錄
主題 | 文章 |
編譯器與IDE |
|
|
|
常用模組 |
|
影像處理 |
|
網路爬蟲 |
|
圖形介面 |
|
檔案打包 |
|
主題 | 文章 |
影像應用 |
|
機器學習 |
|
深度學習 |
|
語言分析 |
|
圖像生成 |
|
小小作品 |
常用網站 |
[ 編輯 ] 筆記 » 程式語言 » Python |
Python|HTML|CSS|JavaScript|Blender|Unreal Engine |
相關文章
Facebook留言
Wordpress留言 (0)