基于Python PIL实现简单图片格式转化器
- 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图片显示问题