pngquant 的 --quality 要填一个区间,我手边就拿 65-80 和 80-95 两档各跑一遍。后面再接 oxipng 和 zopflipng。想看的是每一步多省了多少、多花了几秒。样本是 12 张 PNG,分截图、图标、插画、照片四类,每类 3 张,全部取自维基共享资源,CC 许可,作者署名放在文末。
先交代这批图和命令
机器是 Apple M4、macOS 26.5.2。工具是 pngquant 3.0.3、oxipng 10.2.1 和 zopflipng(zopfli 1.0.3_1)。跑在 2026-10-29。每张图每个步骤我只跑了一次。耗时是单次墙钟,三张合计。图标类特别小,只有 23 KB 到 120 KB,百分比抖得厉害。下面的结论只对这 12 张、这台电脑、这几个参数成立。命令很短。先用 pngquant 减色,再把输出复制一份交给 oxipng。80-95 那一档只是把区间换掉。下面是图标类里一张 40,369 字节的图,输出是我本机的真实结果,IN 和 Q 是占位名。
ini
$ pngquant --quality=65-80 --speed 4 --force --output Q.png IN.png; echo exit=$?
exit=0
$ cp Q.png Q_ox.png; oxipng -o 4 --strip safe Q_ox.png
Files processed: 1/1
Input size: 7.42 KiB (7600 bytes)
Output size: 6.79 KiB (6954 bytes)
Total saved: 646 bytes (8.50%)
exit=0
这张图从 40,369 字节减到 7,600,再被 oxipng 压到 6,954。12 张里两档质量都没有触发「低于下限就不输出」,命令记录里没有 exit=99。每一张都真被减色了。
减色一步就省掉六成以上
先看 pngquant 自己干了多少。65-80 这一档,截图省 68.2%。图标省 79.8%。插画省 75.3%。照片省 66.3%。80-95 保留的颜色更多,四类分别是 67.2%、76.5%、70.1%、64.2%。耗时很轻,三张合计只要 0.14 到 0.40 秒。两档差距不大。截图只差一个百分点。插画差 5.2 个百分点,是四类里拉得最开的。画质我没有逐张比过,这里只比体积。
再接 oxipng 多省的是个位数百分点
下表每格是累计省多少,相对该类原始体积。括号里是 oxipng 这一步自己的耗时。
| 类 | 原始字节 | 65-80 减色 | 再 oxipng | 80-95 减色 | 再 oxipng |
|---|---|---|---|---|---|
| 截图 | 1,890,089 | 68.2% | 70.1%(1.56 秒) | 67.2% | 69.1%(1.68 秒) |
| 图标 | 184,137 | 79.8% | 82.9%(0.85 秒) | 76.5% | 79.7%(0.91 秒) |
| 插画 | 316,993 | 75.3% | 76.9%(1.35 秒) | 70.1% | 72.4%(1.35 秒) |
| 照片 | 2,063,192 | 66.3% | 70.3%(0.80 秒) | 64.2% | 70.3%(0.83 秒) |
65-80 这一档,oxipng 多省的是截图 1.9、图标 3.1、插画 1.6、照片 4.0 个百分点。这一步三张合计花 0.80 到 1.56 秒。不算久。80-95 那一档多省的是截图 1.9、图标 3.2、插画 2.3、照片 6.1 个百分点。照片类最明显。65-80 减色后是 694,735 字节,再 oxipng 到 612,968。80-95 减色后是 738,097 字节,再 oxipng 到 613,199。两档在 pngquant 单独跑时差了四万多字节,过了 oxipng 只剩 231 字节。这个现象我只在 12 张里见到,不外推。照片类为什么收益最高,我没有去查。截图、图标、插画三类没有这种收敛。80-95 一档最后仍然比 65-80 大。插画类差了 14,266 字节(87,477 对 73,211)。
下面这张散点图把每类、每种组合的累计省多少和累计耗时放在一起。横轴是对数,三角形是 pngquant 单独,菱形是 65-80 加 oxipng。

这张图要看两处。左上角那一簇三角形和倒三角,都在 0.5 秒以内,已经省到 64% 以上。往右走到 1 到 2 秒的菱形和叉号,纵坐标只高出一小截。样本取自维基共享资源,CC 许可,图内页脚已写明。
zopflipng 多花十几秒几乎不再省
我顺手把 zopflipng 也接在 pngquant 后面跑了一遍。65-80 之后再跑,四类各自多省的只在 0.0 到 0.5 个百分点之间,几乎看不出差别。耗时却要三张合计 3.46 到 19.52 秒,截图类最慢。对照 oxipng 的 0.80 到 1.56 秒,这一步的性价比明显低。话要说准。zopflipng 我用的是快速模式。参数是 -q -y --filters=01234mepb,没有加 -m。oxipng 一步同时做了位深和调色板的无损缩减,zopflipng 在这组参数下只重压 deflate。这个结果不代表 zopfli 算法本身比 oxipng 差。去掉 -q 的完整模式在这组对照里没放。
先无损再减色等于白跑
顺序是我最想确认的一件事。把 oxipng 放在 pngquant 前面跑,65-80 一档的最终体积几乎等于 pngquant 单独的体积。照片是 694,253 对 694,735,只差 482 字节,截图两者都是 601,760。先 zopflipng 再 pngquant 也是同样的结果。我的推测是 pngquant 会把图像重新编码输出。前面做的 deflate 优化基本被丢掉。这只是从表现猜的,没看过它的实现。想省就先减色后无损。反过来前面那一步没有收益。
调色板 PNG 输出还能再压一轮
这次批量压缩我用的是图映 ImgIng(imging.cn/),把同样 12 张用「统一输出 PNG」跑了一遍。输出并不都是调色板 PNG。只有图标 3 张和 Anime girl 1 张是调色板输出。另外 7 张是 RGBA,输出比原图还大,最多的一张大了 65.4%。还有 1 张因为位深高被保留原件。官网写的是即使变大也保留转换结果并标注,界面上确实标了「体积增加」。拿那 4 张调色板输出各再跑一次 oxipng,体积又掉了一截。
| 文件 | 图映输出(字节) | 再 oxipng(字节) | 多省 |
|---|---|---|---|
| Adaptability icon | 9,346 | 6,301 | 32.6% |
| Afro Mobile icon | 8,324 | 5,946 | 28.6% |
| Anime girl | 90,040 | 61,748 | 31.4% |
| Blue star icon | 43,216 | 23,571 | 45.5% |
多省的比例是相对图映输出算的,范围 28.6% 到 45.5%。这说明批量输出的调色板 PNG 还有无损空间。只有 4 张、单次。不写成普遍结论。同一批原图直接走 pngquant 65-80 再 oxipng,Adaptability 是 6,954 字节,Afro 是 3,823,Blue star 是 20,719,Anime girl 是 50,468。颜色数不同。画质也没比。这两组数字不能直接拿来评谁更好。
这批数字只代表这 12 张
范围再说一遍:12 张图,每类 3 张,一台 M4 的电脑,每步单次。耗时是墙钟,没有排除磁盘和系统波动。
样本署名
样本全部取自维基共享资源(Wikimedia Commons),CC 许可或公有领域,作者按 Commons 元数据列出。
| 文件 | 许可 | 作者 |
|---|---|---|
| 2011_Talend_MDM_studio.png | CC BY-SA 3.0 | Copyleft |
| 2019-06-19_OpenProject_by_Benoit_Soubeyran.png | CC BY-SA 4.0 | Mazuritz |
| 2020-06-29_Screenshot_The_Book_Fort_Monmouth_-_Fort_Montagu.png | CC0 | Stefan Kühn |
| Adaptability_icon.png | CC0 | 作者未知 |
| Afro_Mobile_Icon.png | 公有领域 | Ben plc |
| Blue_star_icon_stylized.png | CC0 | PrazerCambraia |
| Anime_girl_publicdomainq.png | CC0 | oksmith |
| Apple_cartoon_with_transparent_background.png | CC0 | Toby8991 |
| Adenosine_triphosphate_ball-and-stick.png | CC0 | FreeCliparts |
| Alekszej_Fedoricsev.png | CC0 | Javelin Bayraktar |
| Directiva_junto_a_presidente_APPA.png | CC BY-SA 4.0 | JaimeRuix |
| Steve_Selvin.png | CC BY 4.0 | UC Berkeley Public Health |
照这批结果我会这么排
批量处理 PNG,我会先 pngquant 再 oxipng -o 4 --strip safe。zopflipng 只留给文件少、不赶时间的场合。两档质量选哪一档,看你愿意为多少颜色付多少体积。照片类过了 oxipng 两档几乎一样。截图和插画还是 65-80 更小。想判断自己那批图值不值得多跑一步,就先拿每类三张样本按上面的命令跑一遍,再对照表里的收益。