基於Python PIL實現簡單圖片格式轉化器

LevarTsang發表於2020-12-18

基於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圖片顯示問題

2.2.4 待更新

相關文章