一个完全本地运行的 Windows 图片压缩工具。图片不上传任何服务器,压缩全程在你自己的机器上完成。
代码注释和本文保留了若干实测数据与踩过的坑,供学习参考。
- 把一张图片压小,并如实告诉你压了多少
- 三个档位:小体积 / 均衡 / 高画质
- 可选限制输出尺寸(只缩小,不放大)
- 压不小就明确报错,绝不产出比原图更大的文件
- 保持原格式时可以大幅压缩(PNG 走调色板减色)
可读取 JPEG / PNG / WebP / BMP / GIF / TIFF。
双击 dist/图片压缩工具.exe,无需安装 Python。
首次启动会慢一两秒 —— 单文件打包的程序需要先把自己解压到临时目录。
需要 Python 3.13 和 Pillow:
pip install pillow
python main.pypip install pyinstaller
pyinstaller --onefile --windowed --clean --paths . \
--name 图片压缩工具 --distpath dist \
--workpath build/gui_work --specpath build main.py产物在 dist/图片压缩工具.exe(约 17 MB)。
python -m unittest discover -s tests测试样本图片全部现场合成,不依赖任何外部文件。
用 --windowed 打的界面程序没有任何控制台输出 —— 万一 Pillow 的 WebP 支持
(依赖额外 DLL)没被打包进去,界面照样能开,只是用到时候才失败,在开发机上完全看不出来。
所以另有一个冒烟测试程序,单独以控制台方式打包:
pyinstaller --onefile --console --clean --paths . \
--name smoke --distpath build/smoke \
--workpath build/smoke_work --specpath build tests/frozen_smoke.py
build/smoke/smoke.exe它会打印编解码能力,并把每条编码路径实跑一遍。
「压缩」不是一种统一的算法,而是两种完全不同的机制:
- 有损(JPEG / WebP):丢掉人眼不敏感的高频细节,
quality就是这个「丢多少」的旋钮。 - 无损(PNG / WebP 无损):只寻找数据里的重复模式。压缩率完全取决于图片本身有多可预测。
由此推出两条容易被忽略的结论:
- 对照片而言,PNG 几乎压不动。照片存成 PNG 时重新优化只能省 2~5%,甚至可能变大 —— 因为 DEFLATE 已经对它生效过一遍了。
- 对截图 / 插画而言,JPEG 会让文件变大。实测把一张界面截图转成 JPEG,体积涨到原图的 938%。因为 JPEG 的块效应在大片纯色边缘制造噪点,反而增加了信息量。
本工具的做法是不猜图片类型,直接比较各方案实际产出的体积,取最小的那个。
- 只处理单张图片,没有批量
- 大图(4000×3000 以上)可能要等几秒,目前只有不确定进度的进度条
- 窗口约 840 px 高,1366×768 的小屏可能放不下
当前版本 1.0.0,变更记录见 CHANGELOG.md。