一句話
照片:JPEG 仍然夠用,AVIF 小得多;WebP 夾在中間,而且它相對於編碼得當的 JPEG 的優勢,比宣傳數字小。截圖、logo、圖表,以及任何有大片純色或透明的圖:PNG 或無損 WebP,絕不用 JPEG。下面是這些結論背後的數字,來自一次真實的編碼測試,不是廠商圖表。
“更小”必須指什麼
把各格式都設成“品質 80”來比,沒有意義:每種編碼器的品質刻度都不一樣。唯一公平的比法是:同樣的觀感,各多大? 本文的做法是,每種格式從低品質往上編碼,直到與原圖的結構相似度達到同一個值(SSIM 0.98,按亮度通道算),記下那一刻的體積。兩張測試照片:桌上的一杯濃縮咖啡(1200 × 800)和一張人像(1024 × 1024),都是公有領域的樣例圖。編碼器:透過 Pillow 12 呼叫的 libjpeg-turbo、libwebp(method 6)和 libavif(speed 4);本站工具用的是 MozJPEG,通常能在 JPEG 這一欄再省 5–10%。
| 格式 | 照片 1(1200×800) | 照片 2(1024×1024) | 達到的設定 |
|---|---|---|---|
| JPEG | 95 KB | 86 KB | q68 / q66 |
| WebP | 104 KB | 76 KB | q86 / q84 |
| AVIF | 59 KB | 47 KB | q60 / q58 |
| PNG(無損) | 1 223 KB | 1 034 KB | — |
| WebP 無損 | 860 KB | 701 KB | — |
兩件事很明顯。同等 SSIM 下 AVIF 比 JPEG 小 38–46%——這部分傳言是真的。WebP 在這兩張照片上和 JPEG 基本打平:一張大 9%,一張小 12%。常被引用的“比 JPEG 小 25–34%“來自 Google 2010 年的研究,對比物件是一個未經最佳化的 JPEG 編碼器,而且是固定品質設定;面對現代編碼器、按同等觀感比,這個差距大部分消失了。有一點對 WebP 有利:低位元速率下它對細節和銳利邊緣的處理比 JPEG 略好,而 SSIM 對此給分偏低。有一點對它不利:WebP 的色度只能 4:2:0 子取樣,所以照片上飽和的紅色文字會有輕微糊邊,而 4:4:4 的 JPEG 不會。
對測試本身的一個說明:兩張源圖本來就是 JPEG,所以每個編碼器都是在壓縮“畫面 + 上一次的壓縮痕跡”。從 RAW 或 PNG 原件出發,三種有損格式都會再小一點,排名不變。
PNG 是給另一種圖用的
表裡 PNG 是 JPEG 的十二倍。這不是 PNG 差,是讓 PNG 幹了不該它乾的活。PNG 是無損的——每個畫素原樣回來——而照片每個畫素裡都有噪點,噪點壓不動。換第三張測試圖,一張純色塊、透明背景的去背插畫(900 × 600),局面反過來:
| 格式 | 體積 |
|---|---|
| PNG | 66 KB |
| WebP 無損 | 55 KB |
| AVIF q80 | 54 KB |
| JPEG q90 | 76 KB,而且透明沒了 |
純色、文字、截圖、圖表、logo:PNG 或無損 WebP。截圖存成 JPEG,每個字母周圍都是振鈴噪波,而且通常比 PNG 更大。照片存成 PNG,是一個以 MB 計的錯誤,會體現在網頁載入時間和被退回的郵件上。
瀏覽器和軟體支援,實話實說
- JPEG:一切,從 1992 年起。凡是要交出你控制範圍的東西——沖印店、政府表單、老安卓手機、Word 檔案——用它最穩。
- PNG:2005 年以後的一切。
- WebP:所有現行瀏覽器(Safari 從 14 起,2020 年)。Windows 照片能開啟;舊版 Office、多數照片印表機和很多上傳表單還不行。
- AVIF:Chrome 85+、Firefox 93+、Safari 16.4+(2023)、Edge 121+。瀏覽器之外支援很薄:Windows 要裝 Store 擴充套件,macOS Ventura 以上原生支援,其它軟體大多不行。到 2026 年,它是一個在網頁上提供圖片的格式,不是一個交給別人的格式。
- HEIC:實際上只有蘋果裝置——見 HEIC 是什麼。
怎麼選
- 把照片發給人或表單:JPEG,品質 80–85。90 以上體積翻倍,差別沒人看得出。
- 自己網站上的照片:AVIF 加 JPEG 後備(
<picture>);圖片流水線還出不了 AVIF 就用 WebP。 - 截圖、logo、圖表、任何帶透明的:PNG;消費方是瀏覽器時用無損 WebP。
- 歸檔自己的照片:原件是什麼就留什麼,不要“轉一下省空間”——每次有損重編碼都在減分。
轉格式在瀏覽器裡在這四種格式間轉換;壓縮並排顯示前後效果和將要產生的體積,你可以停在看起來真的一樣的那一檔,而不是滑塊預設的那一檔。