圖片能大幅變小,是因為原始像素中存在大量可預測資訊,而且人眼對某些細節比其他細節不敏感。無損壓縮只改寫資料的表示方式,解碼後每個像素完全相同;有損壓縮則捨棄較不易察覺的資訊,換取更小檔案。JPEG、PNG 與 WebP 的差異,不只是副檔名,而是它們如何預測像素、轉換訊號、量化細節,以及是否支援透明度。

未壓縮圖片為何很大

一張寬 4000、高 3000 像素的 RGB 圖片共有 1,200 萬個像素。若每個紅、綠、藍通道各用 1 位元組,僅像素資料就約需 3,600 萬位元組,還未計入其他資訊。

但照片中相鄰像素通常很相似。天空是一大片漸層,牆面顏色緩慢變化,圖示則可能重複同樣色塊。壓縮演算法不用逐一保存所有原始值,而可記錄「和旁邊差多少」或「這種模式重複幾次」,再搭配較短碼字表示常見情況。

PNG 如何做到無損

PNG 常用於圖示、介面截圖、線條圖與需要透明背景的圖片。編碼前,它會對每一列像素套用預測濾波,例如猜測目前像素接近左側、上方或鄰近像素,再只保存預測誤差。平坦區域的誤差常接近零,重複性因此提高。

接著,PNG 以 DEFLATE 類型的方式尋找重複序列,並用較短編碼表示常出現的符號。解碼時步驟可完全反轉,所以像素不變。

無損不代表一定很小。照片包含細碎紋理與感光雜訊,像素較難預測,PNG 往往比有損格式大。反之,少色、邊界清楚的圖形有大量重複,PNG 可能很有效率,而且文字邊緣不會出現有損壓縮雜訊。

JPEG 如何丟掉較不敏感的細節

JPEG 通常先把 RGB 轉成亮度與色度資訊。人眼對亮度輪廓較敏感,對細微色彩變化相對不敏感,因此編碼器可降低色度解析度,保留更多亮度細節。

圖片再被切成小區塊,透過離散餘弦轉換,把像素值改寫成不同空間頻率的係數。低頻代表大範圍緩慢變化,高頻代表細線、銳利邊界與微小紋理。這不是把圖片真的拆成波浪,而是換一組更容易壓縮的數學座標。

接著是造成資訊損失的量化。係數除以量化步長並取整數,許多較小的高頻係數會變成零,後續便能高效編碼。量化越強,檔案通常越小,但細節流失、方塊感與邊緣振鈴也更明顯。

為何 JPEG 反覆儲存會劣化

每次解碼後再以有損 JPEG 儲存,都可能重新分區、轉換與量化。先前被取整的資訊無法復原,新一輪又丟棄更多細節,因此多次編修可能累積失真。較穩妥的流程是保留原始或無損工作檔,最後輸出一次所需的 JPEG。

單純複製 JPEG 檔案不會變差,因為位元內容沒有改變。劣化發生在重新解碼、處理並有損編碼,而不是檔案被搬移或上傳本身。

WebP 為何常能兼顧體積與功能

WebP 同時提供有損與無損模式,也支援透明度。有損模式利用區塊預測,從鄰近區域推測目前區塊,再壓縮預測誤差;無損模式則運用像素預測、色彩轉換與熵編碼減少重複。

它常能在相近視覺品質下得到比傳統格式更小的檔案,但結果依圖片內容與編碼器設定而變,不存在所有圖片都固定節省同一比例的保證。極簡圖示、照片、透明插圖與高雜訊影像,最佳選擇可能不同。

品質 80 不是保留 80% 資訊

多數圖片工具的品質滑桿是編碼器參數,不是通用物理單位。品質 80 不表示保留原始資料的 80%,也不代表檔案會變成原來的 80%。不同格式、程式版本甚至不同編碼器,都可能把同一數字映射到不同量化設定。

檔案大小與品質也不是線性關係。從很高品質稍微降低,可能省下大量空間而外觀差異很小;進入較低品質後,再降低一點便可能快速出現色塊與模糊。

尺寸縮放和壓縮是兩件事

把 4000 像素寬的照片縮到 1200 像素,會直接減少像素數量;維持尺寸但調低 JPEG 品質,則是減少每個區域保留的細節。兩者可以一起使用,而且對只需小尺寸顯示的網頁而言,先調整到合理像素尺寸,通常比硬壓一張超大圖更有效。

縮放也會失去資訊,因為多個來源像素必須合成較少的目的像素。重取樣方法會影響銳利度與鋸齒,不能把縮圖視為完全無損。

如何選擇格式與設定

照片可先測試 JPEG 或有損 WebP;透明插圖、介面元素與清楚文字可測試 PNG 或無損 WebP。不要只比較檔案大小,也要放大檢查人物輪廓、細字、漸層、陰影與透明邊緣。

壓縮工具若在瀏覽器本機處理,能減少圖片傳往伺服器的需求,但仍應自行確認工具的隱私說明。重要原稿則應另行備份,避免把壓縮輸出覆蓋唯一來源。

圖片壓縮的本質,是用可逆預測消除重複,或以視覺模型選擇性捨棄細節。PNG 重視像素完全還原,JPEG 擅長連續色調照片,WebP 則提供較新的有損與無損選項。理解內容類型、顯示尺寸與可接受失真,比追求單一格式或固定品質數字更可靠。