python实现的按不同质量批量压缩图片

117 阅读5分钟

图片批量压缩工具

这是一个使用 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)

安装

  1. 确保已安装 Python 3。 你可以从 Python 官网 下载并安装。
  2. 安装 Pillow 库: 打开你的终端或命令提示符,运行以下命令:
    pip install Pillow
    

使用方法

  1. 下载或保存代码:image_compressor_gui.py 文件保存到你的电脑上。
  2. 运行脚本: 打开终端或命令提示符,导航到脚本所在的目录,然后执行:
    python image_compressor_gui.py
    
  3. 操作界面:
    • 程序窗口将会打开。
    • 点击 "选择文件夹" 按钮,浏览并选择你想要压缩图片的文件夹。选定的路径会显示在输入框中。
    • "压缩质量" 部分,选择一个压缩等级(高、中、低)。默认为 "中"。
    • 点击 "开始压缩" 按钮。
    • 程序将开始扫描并处理图片。处理状态会显示在下方的文本框中。按钮会变为 "处理中..." 并且界面暂时不可操作。
    • 处理完成后,会弹出提示框告知结果,状态窗口也会显示总结信息。界面恢复可操作状态。
  4. 查看结果: 压缩后的图片位于你选择的源文件夹内一个名为 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 文件。

  1. 安装 PyInstaller: 如果你还没有安装 PyInstaller,请在命令提示符 (CMD) 或 PowerShell 中运行:

    pip install pyinstaller
    
  2. 打包脚本:

    • 打开命令提示符 (CMD) 或 PowerShell。
    • 使用 cd 命令切换到 image_compressor_gui.py 文件所在的目录。
    • 运行以下命令进行打包:
      pyinstaller --onefile --windowed image_compressor_gui.py
      
      • --onefile: 将所有内容打包成单个 .exe 文件。
      • --windowed: 运行时隐藏命令行控制台窗口(适用于 GUI 程序)。
  3. 查找 .exe 文件: 打包完成后,在你的脚本目录下会生成一个 dist 文件夹。进入 dist 文件夹,你将找到 image_compressor_gui.exe 文件。

  4. 运行: 双击 dist 文件夹中的 .exe 文件即可启动程序。你可以将此 .exe 文件复制到其他 Windows 电脑上运行。

打包注意事项:

  • 首次运行: .exe 文件首次启动可能稍慢,因为它需要解压依赖。
  • 杀毒软件: 某些杀毒软件可能会误报 PyInstaller 生成的 .exe 文件。如果遇到此情况,请尝试将其添加到信任列表。
  • 文件大小: 使用 --onefile 生成的 .exe 文件会包含 Python 解释器和所有库,因此体积会相对较大。

1.png