← 返回部落格

PNG 無損壓縮工具推薦:先分清「真無損」和「看起來無損」

搜「PNG 壓縮」,排在前面的工具都說自己「無損」「畫質不變」,壓縮率卻能差出幾倍:有的省 70%,有的只省 10%。 差別不在誰的算法更神奇,而在於:它們說的「無損」根本不是同一件事。 這篇文章先講清楚這個區別,再按使用場景推薦工具。

分享

搜「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,在本機完成壓縮,圖片不會上傳雲端。