基於Python PIL實現簡單圖片格式轉化器
1、簡介
提示:閱讀本文,預設你對Python有一定了解,並且安裝有PIL,對tkinter有一定使用基礎。文中所有程式碼皆在Python3版本上實現,請務必注意
Pyhton PIL庫提供了許多圖片處理功能,理論上可以藉助此完成圖片格式轉換功能,在配合Python tkinter庫繪製前端頁面,基本上可以實現一個簡單圖片格式轉換器
2、前期資料準備
2.1邏輯支援
2.1.1如何實現圖片格式轉換?
Python PIL庫提供了許多圖片處理功能,現在我們只需要其中一個功能:圖片格式轉換支援我們實現我們的圖片格式轉換器。具體如下:
from PIL import Image # 引入PIL Image提供圖片格式轉換功能
file_path = 'D:/test/test.png' #測試圖片
photo = Image.open(file_path)
photo.save('D:/test/new_test.gif') # save會根據字尾名轉換為特定格式
注意:在轉換為.jgp格式圖片時,需要將圖片模式轉換為RGB模式,即在save語句之前加上:photo = photo.convert('RGB')
更多參考PIL save語句說明
當然,這裡我們必須宣告一點:PIL提供的格式轉換支援是有限的,具體參考PIL支援圖片格式
2.1.2如何儲存需要大小的圖片?
具體參考:
from PIL import Image # 引入PIL Image提供圖片格式轉換功能
file_path = 'D:/test/test.png' #測試圖片
photo = Image.open(file_path)
photo = photo.resize((200,300)) # 將圖片大小轉換為(width,height)200x300大小
photo.save('D:/test/new_test.gif') # save會根據字尾名轉換為特定格式
到此,邏輯支援部分基本上夠我們實現後端的圖片格式轉換了。
2.2前端頁面支援
2.2.1圖片檔案選擇
通過tkinter.filedialog中的檔案選擇框元件:askopenfilename()返回開啟的圖片檔案的檔案路徑,具體參考:
import tkinter.filedialog
file_path = tkinter.filedialog.askopenfilename(title = '選擇檔案')
print(file_path)
title
引數設定檔案選擇框顯示時的窗體標題
2.2.2 儲存檔案到目標路徑
通過tkinter.filedialog中的檔案儲存框元件:asksaveasfilename()返回儲存的圖片檔案的檔案路徑,具體參考:
import tkinter.filedialog
file_savepath = tkinter.filedialog.asksaveasfilename(title = '儲存檔案',filetypes = (('JPG','.jpg'),('PNG','.png')))
print(file_savepath)
title
引數設定檔案選擇框顯示時的窗體標題,filetypes
引數設定了儲存檔案時提供的檔案格式下拉選項,當前設定會出現如下檔案格式選項:
注意:當前只是前端頁面提供的儲存頁面,實際儲存檔案還是在後端實現
2.2.3預覽圖片
我們通過一個Label元件實現預覽需要轉換的圖片,為Label中image屬性新增為要載入的圖片。這裡,我們使用PIL中的ImageTk.PhotoImage來載入預覽圖片,而不tkinter.PhotoImage,主要目的是為了使用Image來裁剪圖片來保證預覽圖片大小一致,防止圖片顯示不完全。具體參考下面的例子:
import tkinter
from PIL import Image, ImageTk
file_path = 'D:/test/test.png'
root = tkinter.Tk()
photo = ImageTk.PhotoImage(Image.open(file_path).resize((200,300))) # 預覽圖片大小為200x300
previewPhoto = tkinter.Label(root, image = photo).pack()
root.mainloop()
這裡,由於需要不斷切換Label的image屬性,可能會遇到Python tkinter之PhotoImage圖片顯示問題