搜「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驗證一下像素是不是真的沒變。
}
