Intro
pngquant 是一个专门压缩 PNG 的命令行工具。它通过调色板量化把 24/32-bit PNG 转成更小的 8-bit PNG,通常能明显减小体积,同时保留透明通道和还不错的视觉质量。
My Use
我用它处理网站里的截图、图标和小型界面素材。ImageMagick 适合"改图",pngquant 更适合"把 PNG 压小"。如果目标是保留 PNG 格式,但让文件体积降下来,它比通用图片工具更直接。
When to Use / Not Use
适合
- 压缩 PNG 截图、图标、UI 素材
- 保留透明通道的同时减小体积
- 批量处理网站静态资源
- 在发布前压一遍图片资源
不适合
- 照片类大图(WebP、AVIF、JPEG 通常更合适)
- 必须无损保留每个像素的图片
- 已经是很小的索引色 PNG
- 对颜色精度极敏感的设计稿或印刷素材
Gotchas
- pngquant 是有损压缩,不是无损优化;颜色会被重新量化
--quality是质量范围,不是 JPEG 那种单点质量值- 如果图片达不到最低质量,默认会跳过输出,脚本里要注意返回结果
- 默认输出文件名会加
-fs8后缀;想覆盖或自定义后缀要显式设置 - 透明渐变、阴影和细腻插画最容易看出压缩痕迹
My Setup
# 压缩单张 PNG,质量控制在 65-85
pngquant --quality=65-85 image.png
# 覆盖原文件,谨慎使用
pngquant --quality=65-85 --force --ext .png image.png
# 批量压缩当前目录 PNG
pngquant --quality=65-85 --skip-if-larger --ext .png --force *.png
# 去掉元数据,减少一点体积
pngquant --strip --quality=65-85 image.png
Story
PNG 的麻烦在于它看起来"已经压缩过了",但很多截图和透明素材仍然很大。pngquant 做的事情很窄:不负责裁剪、不负责格式转换、不负责复杂处理,只负责把 PNG 变小。窄有时是优点,因为参数少、结果稳定,很适合放进发布前的检查流程。
Minimal Example
# 生成 image-fs8.png
pngquant image.png
# 原地压缩,质量不足则跳过
pngquant --quality=70-90 --skip-if-larger --force --ext .png image.png
# 批量压缩 assets 里的 PNG
pngquant --quality=70-90 --skip-if-larger --force --ext .png assets/**/*.png
