图片批量压缩工具
这是一个使用 Python 和 Tkinter GUI 库制作的桌面应用程序,用于批量压缩指定文件夹内的图片。它可以帮助用户减小图片文件大小,同时保持可接受的视觉质量。
功能特性
- 图形用户界面 (GUI): 提供简单易用的界面进行操作。
- 文件夹选择: 用户可以选择包含图片的源文件夹。
- 递归处理: 自动处理所选文件夹及其所有子文件夹中的图片。
- 多种图片格式支持: 支持常见的图片格式,如 PNG, JPG/JPEG, BMP, GIF, TIFF。
- 等比例压缩: 在调整尺寸时保持图片的原始宽高比。
- 质量等级选择: 提供 "高"、"中"、"低" 三种压缩质量选项,对应不同的目标尺寸和压缩参数。
- 高: 较大尺寸 (最大 1920px),较高 JPEG 质量 (90),较低 PNG 压缩。
- 中: 中等尺寸 (最大 1080px),中等 JPEG 质量 (75),中等 PNG 压缩。
- 低: 较小尺寸 (最大 720px),较低 JPEG 质量 (50),较高 PNG 压缩。
- 自动方向修正: 尝试读取图片的 EXIF 信息并自动旋转图片,以修正拍摄时的方向问题(主要针对 JPEG)。
- 格式智能处理:
- 带透明通道 (Alpha) 的图片(如 PNG)在压缩时会保留透明度(如果保存为 PNG)。若保存为 JPEG,则会添加白色背景。
- BMP 等无损格式会优先尝试转为 PNG 或 JPEG 进行压缩。
- GIF 和 TIFF 会尝试使用合适的压缩选项保存。
- 后台处理: 压缩过程在后台线程中运行,避免界面冻结。
- 状态反馈: 实时显示处理进度和最终结果。
- 安全输出: 压缩后的图片保存在源文件夹下的
compressed_images子文件夹中,不会覆盖原始文件。
环境要求
- Python 3.x
- Pillow 库 (Python Imaging Library fork)
安装
- 确保已安装 Python 3。 你可以从 Python 官网 下载并安装。
- 安装 Pillow 库: 打开你的终端或命令提示符,运行以下命令:
pip install Pillow
使用方法
- 下载或保存代码: 将
image_compressor_gui.py文件保存到你的电脑上。 - 运行脚本: 打开终端或命令提示符,导航到脚本所在的目录,然后执行:
python image_compressor_gui.py - 操作界面:
- 程序窗口将会打开。
- 点击 "选择文件夹" 按钮,浏览并选择你想要压缩图片的文件夹。选定的路径会显示在输入框中。
- 在 "压缩质量" 部分,选择一个压缩等级(高、中、低)。默认为 "中"。
- 点击 "开始压缩" 按钮。
- 程序将开始扫描并处理图片。处理状态会显示在下方的文本框中。按钮会变为 "处理中..." 并且界面暂时不可操作。
- 处理完成后,会弹出提示框告知结果,状态窗口也会显示总结信息。界面恢复可操作状态。
- 查看结果: 压缩后的图片位于你选择的源文件夹内一个名为
compressed_images的新子文件夹中。如果源文件夹包含子文件夹,compressed_images内也会保持相应的子文件夹结构。
实现细节
- GUI: 使用 Python 内置的
tkinter库及其主题化扩展tkinter.ttk构建图形界面。 - 图片处理: 核心的图片读取、缩放、保存功能由强大的
Pillow库提供。Image.open(): 打开图片文件。img._getexif()和ExifTags: 读取 EXIF 元数据以修正图片方向。img.thumbnail(): 进行等比例缩放,限制最大尺寸。img.save(): 保存压缩后的图片,根据格式应用不同的quality,optimize,compress_level等参数。
- 并发处理: 使用
threading模块将耗时的图片处理任务放到后台线程执行,防止 GUI 无响应。通过root.after()机制安全地从后台线程更新 GUI 组件(状态文本框)。 - 文件系统操作: 使用
os模块进行文件夹遍历 (os.walk)、路径拼接 (os.path.join)、目录创建 (os.makedirs) 和文件检查 (os.path.exists,os.path.isdir)。 - 用户反馈: 使用
tkinter.messagebox显示错误、警告和完成信息。使用scrolledtext提供可滚动的状态输出区域。
注意事项
- 处理大量或非常大的图片可能需要较长时间和较多内存。
- 对于某些特殊的图片格式或损坏的文件,处理可能会失败。错误信息会显示在状态窗口中。
- GIF 动图目前仅简单处理第一帧并保存为静态 GIF。复杂的多帧 GIF 压缩可能效果不佳。
- EXIF 方向修正是基于标准的 EXIF 标签,某些非标准或损坏的 EXIF 数据可能无法正确处理。
生成可执行文件 (.exe) (Windows)
如果你想在没有安装 Python 环境的 Windows 电脑上运行此工具,可以使用 PyInstaller 将其打包成一个独立的 .exe 文件。
-
安装 PyInstaller: 如果你还没有安装 PyInstaller,请在命令提示符 (CMD) 或 PowerShell 中运行:
pip install pyinstaller -
打包脚本:
- 打开命令提示符 (CMD) 或 PowerShell。
- 使用
cd命令切换到image_compressor_gui.py文件所在的目录。 - 运行以下命令进行打包:
pyinstaller --onefile --windowed image_compressor_gui.py--onefile: 将所有内容打包成单个.exe文件。--windowed: 运行时隐藏命令行控制台窗口(适用于 GUI 程序)。
-
查找 .exe 文件: 打包完成后,在你的脚本目录下会生成一个
dist文件夹。进入dist文件夹,你将找到image_compressor_gui.exe文件。 -
运行: 双击
dist文件夹中的.exe文件即可启动程序。你可以将此.exe文件复制到其他 Windows 电脑上运行。
打包注意事项:
- 首次运行:
.exe文件首次启动可能稍慢,因为它需要解压依赖。 - 杀毒软件: 某些杀毒软件可能会误报 PyInstaller 生成的
.exe文件。如果遇到此情况,请尝试将其添加到信任列表。 - 文件大小: 使用
--onefile生成的.exe文件会包含 Python 解释器和所有库,因此体积会相对较大。