3C科技 娛樂遊戲 美食旅遊 時尚美妝 親子育兒 生活休閒 金融理財 健康運動 寰宇綜合

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■修正完成!") 粉絲專頁

本文由jfsblog提供 原文連結

寫了 5860316篇文章,獲得 23313次喜歡
精彩推薦