身為一名網路圖文創作者,常常需要將其他照片格式轉為JPG並調整照片寬度,搜尋網路上免費的PNG2JPG Converter都有諸多限制,讓我苦惱許久。於是我決定寫一個相片批次轉檔工具,雖然我不是很精通程式語言,但逐步列出做法再針對性的搜尋語法,用Python搭配OpenCV寫一個簡單的批次相片轉檔工具也不是不可能。這個相片批次轉檔工具除了可以大量改變相片檔案類型外,也能夠等比例縮放圖片至想要的大小,在部落格照片的快速處理上有非常大的幫助。如果想直接看完整程式碼的,可以透過目錄的超連結直接跳轉,這篇我會記錄我撰寫的過程,以便之後複習使用。有需要者也可以自行取用。
程式目標設定
- 將照片從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 |


![[Python初學者] 安裝Python與Visual Studio Code步驟 [Python初學者] 安裝Python與Visual Studio Code步驟](https://i2.wp.com/img.jfsblog.com/2023/08/20230803011004_3.jpg?quality=90&zoom=2&ssl=1&resize=350%2C233)

![[Python] PySide6模板與入門學習!圖形化介面使用者友善,讓程式變得更貼心 [Python] PySide6模板與入門學習!圖形化介面使用者友善,讓程式變得更貼心](https://i2.wp.com/img.jfsblog.com/2024/11/20241111213500_0_204ef7.jpg?quality=90&zoom=2&ssl=1&resize=350%2C233)





