Zi 字媒體
2017-07-25T20:27:27+00:00
身為一名網路圖文創作者,常常需要將其他照片格式轉為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
跳出執行完成通知
print
根據列出的程式,需要確認Anaconda的Python編譯器有安裝cv2、os和glob三種軟體包。
程式效果
如下圖(註解比程式碼多XDD),執行運算之後,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■修正完成!")
粉絲專頁
寫了
5860316篇文章,獲得
23313次喜歡