ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

基于 Pillow 的 JPEG 转 PNG 图片转换:python-mini-projects 终端脚本与 Tkinter 图形界面实战

基于 Pillow 的 JPEG 转 PNG 图片转换:python-mini-projects 终端脚本与 Tkinter 图形界面实战 基于 Pillow 的 JPEG 转 PNG 图片转换python-mini-projects 终端脚本与 Tkinter 图形界面实战【免费下载链接】python-mini-projectsA collection of simple python mini projects to enhance your python skills项目地址: https://gitcode.com/gh_mirrors/py/python-mini-projects本篇技术指南以 projects/Convert_JPEG_to_PNG 项目为核心讲解如何用 Python 的 Pillow 库将.jpeg图片一键转为.png格式。项目同时提供了终端脚本与图形界面GUI两种实现方式读者完成后既能掌握 Pillow 基础读写 API也能理解 Tkinter 文件对话框与事件绑定的最小可用范式可直接迁移到批量格式转换、图像预处理等日常任务中。项目概述一个极简的图片格式转换示例Convert_JPEG_to_PNG 是 python-mini-projects 仓库中一个非常精简的示例项目核心目标只有一个把 JPEG 格式的图片文件转换为 PNG 格式。项目目录包含 5 个文件converter_terminal.py终端版转换脚本仅 3 行核心代码converter_GUI.py基于 Tkinter 的图形界面版支持任意选择文件与保存位置input.jpeg示例输入图片output.png示例输出图片README.md项目说明文档。从技术背景看JPEG 是一种有损压缩格式不支持透明通道适合照片类内容PNG 则是无损压缩格式支持 Alpha 透明通道常用于需要保真或叠加透明背景的场景。二者互转是最常见的图像处理需求之一而 Pillow 让这一操作缩减为打开 保存两个 API 调用。环境准备安装 Pillow项目唯一依赖是 Pillow 模块按 README.md 的说明在终端执行pip install pillowPillow 是经典 Python 图像处理库 PILPython Imaging Library的现代维护分支接口与 PIL 基本兼容Image模块提供了统一的图片打开、处理与保存入口。安装后可用以下命令快速验证python -c from PIL import Image; print(Image.__version__)方法一终端转换脚本converter_terminal.py终端版实现非常直观完整代码如下converter_terminal.pyfrom PIL import Image im1 Image.open(input.jpeg) # takes input image from present folder im1.save(output.png) # output image is generated the folder使用步骤与 README 描述一致将需要转换的 JPEG 图片放入项目目录并命名为input.jpeg脚本通过相对路径读取当前目录下的该文件在项目目录下运行python converter_terminal.py转换结果以output.png为名生成在当前目录。这里有两点值得注意的实现细节Image.open()是惰性加载它只解析图片头信息并返回句柄像素数据在真正需要时才解码。因此即使图片尺寸较大示例中的 input.jpeg 为 2082×2975打开操作也很快save()根据扩展名自动推断输出格式保存路径以.png结尾时Pillow 自动按 PNG 编码器写出无需显式指定format参数。由于脚本使用相对路径input.jpeg运行时必须以包含该文件的目录为当前工作目录否则会抛出FileNotFoundError同理同名output.png已存在时会被直接覆盖。方法二Tkinter 图形界面转换器converter_GUI.py终端版适合固定文件名的批量场景而 GUI 版converter_GUI.py则允许用户从任意位置挑选图片、并把结果保存到任意位置交互上更贴近普通用户。界面搭建脚本先创建 Tkinter 主窗口与画布import tkinter as tk from tkinter import filedialog from PIL import Image root tk.Tk() # Tkinter window initialized root.title(Converter) # Title of the window canvas1 tk.Canvas(root, width300, height250, bgorange, reliefraised) canvas1.pack() label1 tk.Label(root, textFile Converter, bglightsteelblue2) # giving a title to the screen label1.config(font(helvetica, 20)) canvas1.create_window(150, 60, windowlabel1) im1 None # variable to store path of imagetk.Tk()初始化主窗口title(Converter)设置窗口标题tk.Canvas创建 300×250 的画布作为容器设置橙色背景与凸起边框Label显示 File Converter 标题并通过canvas1.create_window(150, 60, ...)定位到画布中部偏上的位置全局变量im1用于暂存用户选中的图片对象初始为None后续作为是否已选择文件的判断依据。导入文件getJPG()def getJPG(): Function to get image location and open it with pillow global im1 import_file_path filedialog.askopenfilename() im1 Image.open(import_file_path)该函数弹出系统原生文件选择对话框filedialog.askopenfilename()用户选中 JPEG 文件后用Image.open()将其读入并赋给全局变量im1。转换保存convertToPNG()def convertToPNG(): Function to change file extenstion to png and save it to Users prefered location global im1 if im1 is None: tk.messagebox.showerror(Error, No File selected) else: export_file_path filedialog.asksaveasfilename(defaultextension.png) im1.save(export_file_path)逻辑分为两支若用户尚未选择文件im1 is None弹出错误提示框 No File selected否则弹出保存对话框asksaveasfilename()defaultextension.png会自动补全.png后缀随后im1.save(export_file_path)将图片写出到用户指定位置。按钮绑定与事件循环font (helvetica, 12, bold) bg royalblue fg white browseButton_JPG tk.Button(text Import JPEG File , commandgetJPG, bgbg, fgfg, fontfont) # Browse button canvas1.create_window(150, 130, windowbrowseButton_JPG) saveAsButton_PNG tk.Button(textConvert JPEG to PNG, commandconvertToPNG, bgbg, fgfg, fontfont) # Convert button canvas1.create_window(150, 180, windowsaveAsButton_PNG) root.mainloop()两个按钮分别通过command参数绑定getJPG与convertToPNG回调函数点击即触发对应逻辑root.mainloop()启动 Tkinter 事件循环保持窗口响应直至用户关闭。使用步骤为运行python converter_GUI.py→ 点击 Import JPEG File 选择图片 → 点击 Convert JPEG to PNG 并选择保存路径。需要注意两点使用前提一是该界面依赖图形显示环境Windows、macOS 或带桌面的 Linux 均可运行无显示器的纯服务器环境不可用二是从源码结构看convertToPNG()中通过tk.messagebox弹出错误提示但文件顶部只显式导入了filedialogfrom tkinter import filedialog若你的运行环境中tkinter.messagebox未随import tkinter自动加载可补一行import tkinter.messagebox以确保错误提示正常弹出。两种实现方式的对比与源码剖析把两个脚本放在一起看可以提炼出几条值得借鉴的设计维度终端版 converter_terminal.pyGUI 版 converter_GUI.py核心 APIImage.open()Image.save()同为 Pillow 两行核心外围包裹 Tkinter输入方式固定文件名input.jpeg相对路径文件对话框任意选择输出位置固定为当前目录output.png保存对话框由用户指定依赖PillowPillow Tkinter标准库自带适合场景批处理、命令行管道、无界面环境面向普通用户的交互工具从实现层面看两个脚本的核心都只是Image.open()与Image.save()这对组合。仓库中同主题的另一个项目 convert_Imgs/JPGtoPNG.py 给出了更显式的一种写法im Image.open(naruto_first.jpg).convert(RGB) im.save(naruto.png, png)其区别在于.convert(RGB)与显式的png格式参数。JPEG 本身不含 Alpha 通道直接转 PNG 无需转换色彩模式但反过来把带透明通道的 PNG 转成 JPEG 时必须先.convert(RGB)否则会因 JPEG 不支持 Alpha 而报错。这正是JPEG→PNG 简单、PNG→JPEG 需留意模式这一不对称性的来源也是本项目中不需要convert()而反向场景需要的原因。运行结果验证在项目目录依次执行终端脚本后即可得到 output.png。以示例素材为例input.jpeg 与 output.png 分辨率完全一致2082×2975画面内容相同PNG 作为无损格式在毛发、草地纹理等边缘细节上不会引入 JPEG 常见的压缩伪影这也是无损转换的直观收益。如果希望程序化验证转换结果可以用 Pillow 读回并检查格式与尺寸from PIL import Image img Image.open(output.png) print(img.format, img.size, img.mode) # 例如PNG (2082, 2975) RGB扩展建议与注意事项在终端版基础上稍作改造即可应对更真实的场景批量转换用os.listdir()遍历目录把Image.open(f) - f.replace(.jpeg, .png)放进循环即可一次转换整目录图片支持任意 JPEG 命名用sys.argv接收命令行参数传入文件名替代写死的input.jpeg防止覆盖保存前用os.path.exists()检查目标文件格式规范JPEG 可能有RGB、CMYK、L等不同模式若遇到 CMYK JPEG 转 PNGPillow 默认会按原模式写出若希望统一为 RGB 可先.convert(RGB)。需要注意本项目的转换仅涉及容器格式变更不会改变像素内容因此不会放大图片或提升画质它的价值在于格式归一化——例如将相机直出的 JPEG 整理为统一的无损 PNG 资源或在需要透明通道的工作流中作为前置步骤。小结Convert_JPEG_to_PNG 用最小代码量演示了图像格式转换的标准姿势Image.open()打开、Image.save()保存格式由扩展名自动推断。终端版适合脚本化、批量化处理GUI 版则通过 Tkinter 的文件对话框与按钮回调把同一对 API 包装成了人人可用的桌面工具。两者结合正好覆盖了写代码的人和用工具的人两类典型使用路径是学习 Pillow 与 Tkinter 入门搭配的合适范本。【免费下载链接】python-mini-projectsA collection of simple python mini projects to enhance your python skills项目地址: https://gitcode.com/gh_mirrors/py/python-mini-projects创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表