ブログへ戻る

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

ImgZilla ブログ

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

Mac App Store · 無料ダウンロード

画像をもっと軽く、速く

ImgZilla をダウンロード。すべて端末内で圧縮し、画像はクラウドに送信されません。

ImgZilla logo