無需上傳, 100% 本機處理, 無需帳戶

文章

為什麼影像每次儲存都會變差

一張在相簿裡看起來清晰銳利的照片,經過幾個群組轉發、又被轉貼幾次之後,變得一格一格的。沒有人特意去編輯它;它只是經過了好幾次重新編碼,每一次都再丟掉一點細節。這叫做世代損失(generation loss),是破壞性壓縮一個古老且被充分理解的特性,也解釋了為什麼被大量轉傳的影像,往往會愈看愈差。以下說明破壞性重新編碼實際丟掉了什麼、為什麼它會累積,以及怎麼阻止檔案繼續變差。

「破壞性」實際上丟掉了什麼

JPEG(網路上大多數分享照片背後的格式)在設計上就是破壞性的:它背後的標準 ITU-T T.81,運作方式是把像素區塊轉換成頻率資料,再依畫質設定,或多或少激進地把這些資料捨入,這一步叫做量化。捨入是無法精確復原的;被丟棄的細節是真的不見了,並沒有藏在檔案的某個角落。高畫質設定捨入得比較輕微,損失很難看出來;低畫質設定捨入得比較劇烈,檔案會出現明顯的色塊,但即使只存一次 JPEG,也一定會丟掉一些東西。

每一次重新編碼都是新的一代

照片第一次存成 JPEG 時,相機的像素資料只被量化一次。再次打開這份 JPEG 並再存一次,就算完全沒有任何編輯,也會把已經是近似值的像素解碼出來,再量化第二次,是疊加在第一次捨入之上,而不是取代它。每多存一次,就多一代,而每一代都會疊加上一代已經產生的色塊和色彩斷層。用合理的畫質設定存一次,幾乎看不出差異;同一個設定連續套用五、六次在同一份檔案上,就會讓照片明顯變差,因為前面每一代的誤差,在下一次再度捨入時依然存在。

五代 JPEG 的連鎖:每次重新編碼都從前一代已經捨入過的像素開始,到第五代畫面明顯出現色塊

為什麼被大量轉傳的影像看起來更差

一張照片經過好幾個聊天視窗、動態消息和重新上傳,幾乎每經過一站就會多一代:通訊軟體為了聊天視窗重新壓縮它,社群平台又為了自己的發布流程再編碼一次,有人把結果截圖再重新上傳這張截圖,這又是對一張已經變差的影像再做一次完整的重新編碼。這些步驟不需要特別草率,也不需要使用異常低的畫質設定,效果就會累積起來;這正是為什麼一張流傳已久、廣泛轉傳的影像,往往會比同一張照片的新鮮副本,明顯多出更多色塊和色彩斷層。

無損格式沒有這個問題

PNG 和無損版本的 WebP 運作方式不同:它們透過在精確的像素資料中尋找規律,更有效率地把資料打包起來,不會捨入丟棄任何東西,所以解碼再重新編碼同一份無損檔案,即使沒有任何編輯,也能一代又一代精確地重現像素。這個保證,正是截圖和線條銳利的圖形、文字,通常存成 PNG 而不是 JPEG 的原因。代價是:同一張普通照片存成無損格式,體積會比合理畫質的 JPEG 大得多,因為沒有捨入這個步驟可以幫忙縮小檔案。

十次重複儲存的比較:JPEG 出現逐漸累積的明顯色塊瑕疵,無損 PNG 則和原始檔案保持像素級的一致

把檔案畫質控制在自己手上

世代損失的連鎖效應,只有在每次儲存都從上一次已經變差的像素開始時,才會不斷累積。保留一份無損母片(原始相機檔案或一份 PNG),每次都從這份母片重新匯出一份新的 JPEG,就能避免在舊的捨入之上再疊加新的捨入。我們的圖片壓縮工具,能讓你在傳送任何內容之前,先挑選畫質設定並看到產生的檔案大小;我們的圖片比對工具,則用滑桿把原圖和壓縮後的副本並排顯示,讓你在把檔案繼續轉發、開啟新一代損失之前,先抓出設定不當的問題。兩者都完全在你的瀏覽器中執行:要檢查的照片絕不會離開你的裝置。

本文涉及的工具

常見問題

複製或搬移 JPEG 檔案會讓它變差嗎?

不會。複製檔案、把它附加到電子郵件,或在資料夾之間搬移,複製的是完全相同的位元組;沒有任何內容被解碼或重新編碼,所以也不會再被量化一次。世代損失只有在像素真的被打開並再次儲存時才會發生,單純搬移檔案本身不會。

我能撤銷世代損失、找回遺失的細節嗎?

不能。量化是真正的破壞性操作:先前儲存時被捨棄的捨入頻率資料,並沒有記錄在檔案的任何地方,所以沒有任何濾鏡或演算法能把它重建出來。對一份已經變差的 JPEG 做銳化或降噪,可以讓瑕疵在視覺上不那麼明顯,但無法還原原本的細節。

把已經變差的 JPEG 轉成 PNG,能阻止問題繼續惡化嗎?

在損害已經造成之後轉換,會逐像素保留 JPEG 當下的樣子,不會再多一次捨入,但無法恢復先前儲存時已經遺失的細節。真正的解法,是在更多世代發生之前,就開始保留一份無損母片,而不是在轉傳鏈的後段才把照片轉成 PNG。

來源