← 返回博客

PNG 无损压缩工具推荐:先分清「真无损」和「看起来无损」

搜「PNG 压缩」,排在前面的工具都说自己「无损」「画质不变」,压缩率却能差出好几倍:有的省 70%,有的只省 10%。 差别不在谁的算法更神奇,而在于:它们说的「无损」根本不是同一件事。 这篇文章先讲清楚这个区别,再按使用场景推荐工具。 先分清:两种「无损」 真无损:像素一个都不变 PNG…

分享

搜「PNG 压缩」,排在前面的工具都说自己「无损」「画质不变」,压缩率却能差出好几倍:有的省 70%,有的只省 10%。
差别不在谁的算法更神奇,而在于:它们说的「无损」根本不是同一件事。
这篇文章先讲清楚这个区别,再按使用场景推荐工具。


先分清:两种「无损」

真无损:像素一个都不变

PNG 本身就是无损格式,它的体积由两部分决定:像素数据怎么排列、怎么用 Deflate 压缩,以及文件里夹带了多少元数据。

真无损压缩只在这两处下功夫:

  • 换一种更省空间的存法。比如图里实际只用了 200 种颜色,就改用调色板模式;没有半透明,就去掉 Alpha 通道;灰度图就按灰度存。
  • 尝试更好的过滤器和 Deflate 参数。同样的像素,编码方式不同,压出来的大小可以差不少。设计工具导出 PNG 时追求速度,通常不会认真尝试。
  • 去掉元数据。导出软件信息、时间戳、文字注释、缩略图等。

压完的图解码出来,和原图逐像素完全相同。代价是省得不多——它只能挤掉「编码不够认真」的那部分水分。

「看起来无损」:其实是有损量化

TinyPNG、pngquant 这类工具省得多,是因为它们做了另一件事:把 PNG 的颜色数量降到 256 色以内(量化),再配合抖动让肉眼看不出来。

这是有损的,像素已经变了。对大部分网页图标、插画来说效果很好,也很值得用;但如果你需要的是「像素绝对不变」——比如 UI 切图要和设计稿严格一致、截图要做像素级比对、素材之后还要再编辑——就不该用它。

判断一个工具是不是真无损,最简单的办法:压缩前后用 ImageMagick 比一下
compare -metric AE 原图.png 压缩后.png null:
输出 0 就是一个像素都没变。


真无损 PNG 工具推荐

命令行:oxipng(首选)

oxipng 是用 Rust 写的 PNG 无损优化器,可以看作老牌工具 OptiPNG 的现代继任者:

  • 多线程,速度快,适合批量处理。
  • -o 0 到 -o 6(以及 -o max)调节压缩力度,等级越高越慢、省得越多。
  • 可选 --zopfli 进一步压缩,但会慢很多。
  • Squoosh 的 PNG 无损压缩,用的就是它。
bash 复制代码
brew install oxipng
oxipng -o 2 --strip safe -r ./images     # 递归处理目录,只去掉不影响显示的元数据

命令行:zopflipng(追求极限体积)

Google 出品,用 Zopfli 算法重做 Deflate 压缩,通常能比 oxipng 默认等级再挤出一点,但速度慢得多,大图可能要跑很久。适合「压一次、用很久」的静态资源,比如网站 Logo、App 内置图标。

命令行:OptiPNG、pngcrush(老牌)

两者都是经典的无损 PNG 优化器,很多工具链里还能见到它们。功能上已经被 oxipng 基本覆盖,新项目没必要专门选它们。

网页:Squoosh

Google 的在线工具,PNG 选 OxiPNG 编码器即为无损(注意别勾选「Reduce palette」,那一项是有损减色)。

优点是免安装、可以左右对比;缺点是一次只能处理一张,下载回来还要自己改名、替换。适合偶尔压一两张。

Mac 图形界面:ImageOptim

开源免费的老牌 Mac 工具,内部整合了 oxipng、Zopfli、pngcrush 等多个优化器,轮流尝试取最小结果。默认是无损模式(有损选项需要手动开启)。

它压缩力度大,但开满所有优化器时速度偏慢;而且是直接覆盖原文件,压之前最好自己备份一份。

Mac 图形界面:ImgZilla

ImgZilla 是我们做的 macOS 图片压缩工具。它处理 PNG 的方式很直接:

  • 用 oxipng 做真无损压缩,压缩等级为 2(和 Squoosh 默认一致),在速度和体积之间取平衡。像素一个都不变,可以用上面的 compare 命令验证。
  • 不做量化、不减色、不转格式、不改尺寸。PNG 压完还是 PNG。
  • 原地压缩:文件名和路径不变,代码、文档里的引用都不用改。
  • 整个文件夹拖进去即可:递归扫描子目录,自动跳过隐藏文件和 node_modules;JPG、GIF、WebP、HEIC、AVIF、SVG 也能一起处理。
  • 原图默认移入废纸篓,不满意就右键「放回原处」。
  • 压不动的不硬压:压缩率不足 0.4% 的文件标为「已最小」,原样保留,也不扣免费额度。
  • 全程本地运行,素材不上传任何服务器。

有两点需要说清楚:

  • 它不追求 PNG 的极限体积。等级 2 比 -o max 或 Zopfli 快得多,代价是可能少省几个百分点。如果你的需求是「把一个 Logo 压到最后一个字节」,zopflipng 或 ImageOptim 更合适。
  • 默认会去掉 PNG 里的全部元数据,包括颜色配置文件。普通 sRGB 图片不受影响;但如果图里嵌了 Display P3 等广色域配置(Mac 截图、设计软件导出时常见),去掉后在色彩管理的软件里颜色可能略有变化。对颜色要求严格的图,可以在设置里打开「保留 EXIF 信息」,元数据就会原样保留。

一张表总结

工具 类型 是否真无损 批量 适合谁
oxipng 命令行 ✅ ✅ 开发者、构建流程
zopflipng 命令行 ✅ 需自己写脚本 追求极限体积、不在乎速度
OptiPNG / pngcrush 命令行 ✅ ✅ 老项目沿用
Squoosh 网页 ✅(OxiPNG,不勾减色) ❌ 一次一张 偶尔压一两张
ImageOptim Mac 应用 ✅(默认) ✅ 想要最大压缩力度的 Mac 用户
ImgZilla Mac 应用 ✅ ✅ 拖文件夹 想批量压、不想改路径、要能反悔
TinyPNG / pngquant 网页 / 命令行 ❌ 有损量化 视版本而定 能接受减色、追求更高压缩率

怎么选

  • 只要像素不变、愿意敲命令:oxipng,写进构建脚本,一劳永逸。
  • 要把单个文件压到极限:zopflipng。
  • Mac 上图形化批量处理:ImageOptim 力度更大;ImgZilla 速度更快、原图可从废纸篓找回、还能顺带处理其他格式。
  • 能接受轻微有损、想要更小:TinyPNG / pngquant,但要清楚这已经不是无损了。

最后提醒一句:无损压缩省多少,取决于 PNG 原来是怎么导出的。设计工具直接导出、从没处理过的 PNG,往往有不少水分;已经被优化过的 PNG,再压也挤不出多少——工具显示「已最小」,说明它已经很好了,不是工具不行。

ImgZilla 目前仅支持 macOS(12.3 及以上),可在 Mac App Store 下载。免费版每天可压缩 10 张,只有压缩成功才计入额度——拖一个装满 PNG 的文件夹进去,再用 compare 验证一下像素是不是真的没变。

想让图片更小更快?

下载 ImgZilla,在本机完成压缩,图片不上传云端。