Skip to content

Latest commit

 

History

History
126 lines (91 loc) · 3.14 KB

File metadata and controls

126 lines (91 loc) · 3.14 KB

压缩工具箱

English | 简体中文

一个基于 Python + Tkinter 的轻量桌面工具,适合做这几件事:

  • 压缩图片
  • 压缩普通文件
  • 计算文件哈希(MD5 / SHA1 / SHA256
  • MD5 改写(在不影响文件内容显示的前提下修改 MD5)

功能

1. 图片压缩

  • 支持 JPG / PNG / WEBP / BMP / TIFF
  • 支持直接选择整个图片文件夹
  • 支持递归扫描子文件夹批量压缩
  • 压缩后保留原文件名
  • 可选输出格式:保持原格式 / JPEG / WEBP / PNG
  • 有损格式支持质量调整
  • 支持尺寸调整:保持原尺寸、按百分比缩放、按最长边限制、自定义宽高
  • 自定义宽高支持非等比输入,程序会自动拉伸图片
  • 自定义宽高模式下可勾选“锁定宽高比”
  • PNG 支持 标准 PNGTinify-like PNG 两种模式
  • 单图模式输出到源文件目录下的 compressed_output
  • 文件夹模式输出到所选目录下的 compressed_output,并保留原目录层级
  • 内置缩略图预览,默认展示前几张图片

2. 文件压缩

  • 支持直接选择整个文件夹
  • 支持递归扫描子文件夹后统一打包
  • 支持 zip
  • 支持 tar.gz
  • 支持 tar.xz
  • 支持单文件 gz
  • 文件夹模式会保留归档内的目录结构
  • 支持解压 ziptar.gztar.xz 和单文件 gz
  • 解压默认输出到安全目录,并会拒绝压缩包内的不安全路径

3. 哈希计算

  • 计算 MD5
  • 计算 SHA1
  • 计算 SHA256

4. MD5 改写

  • 在不影响文件内容显示的前提下修改文件的 MD5 值
  • 通过在文件副本末尾追加随机字节实现
  • 支持批量处理和文件夹递归扫描
  • 输出到 md5_modified 文件夹,保留原目录结构
  • 处理日志显示每个文件的原始 MD5 和新 MD5

界面特点

  • 深色头部 + 状态卡片
  • 页签式功能分区
  • 可滚动日志输出
  • 底部状态栏显示当前进度
  • 支持拖拽文件或文件夹到窗口

拖拽支持

  • requirements.txt 中已包含 tkinterdnd2
  • 首次使用前如有需要,请重新安装依赖

Tinify-like PNG 模式

  • 使用 imagequant 做 256 色调色板量化
  • 默认关闭抖动,更接近已测试的 Tinify PNG 样本
  • 量化质量区间固定为 40~90
  • 若检测到 zopfli,会继续做一轮 PNG 深度优化
  • 若依赖缺失,会自动回退到标准 PNG 压缩

运行

先安装依赖:

python3 -m pip install -r requirements.txt

启动程序:

python3 app.py

打包 macOS 应用

项目已补充 PyInstaller 打包配置,可直接生成独立的 macOS .app,并额外生成 .dmg 安装包。应用图标默认取自项目根目录的 icon.png

执行:

chmod +x build_macos.sh
./build_macos.sh

打包完成后,应用位于:

dist/CompressImage.app

同时会生成安装包:

dist/CompressImage.dmg

启动方式:

open dist/CompressImage.app

后续可扩展方向

  • 更好的拖拽高亮效果
  • 图片尺寸调整
  • WebP 无损 / 有损切换
  • 导出哈希清单到文本文件
  • 打包成 macOS / Windows 桌面应用