← 部落格
5 分鐘閱讀

照片上傳後為什麼顏色變淡?

上傳後照片變淡通常是色彩描述檔不符,不是壓縮。先查檔案帶哪個描述檔,輸出前轉成 sRGB。

  • colour profile
  • sRGB
  • Display P3
  • Adobe RGB
  • image export
  • product photography
  • web images
  • background replacement
照片上傳後為什麼顏色變淡?

你把商品照修好,紅色和那件毛衣本人一模一樣,上傳到你的賣場——紅色卻變成磚紅。綠色偏成橄欖色。在同一台螢幕上打開原檔:還是完美的。

那不是壓縮,平台也沒有在「毀掉」你的圖。常見的原因是色彩描述檔不符:檔案用一種語言描述自己的顏色,而頁面拿另一種語言去讀那些數值。

同樣的數值,為什麼會變成兩種顏色

一個像素就是三個數字,而 200、40、40 要先知道是哪個色彩空間在量它,才會是某一個特定的紅。Display P3 把紅色原色推得比 sRGB 更遠(x 0.68 對 0.64),所以同一組數值描述的是更深的紅。Adobe RGB (1998) 則沿用 sRGB 完全相同的紅色和藍色原色,只把綠色那一支拉開,因此它多出來的範圍落在綠色和青色上。無論哪一種,這些數值對一個預設 sRGB 的瀏覽器來說,意思都不一樣。

一整面播送用監視器牆,全部顯示同一組彩條測試圖,紅、綠、青、洋紅的飽和色帶並排

描述檔就是那張寫著「用的是哪一把尺」的字條,而它一旦不見,網頁的預設值毫不留情。CSS Color Module Level 4 講得很明白:為了相容性,HTML 中指定的顏色,以及未標記色彩描述檔的圖片,除非另有說明,都必須視為位於 sRGB 色彩空間。你那張沒有標記的上傳圖,從來就沒有另作說明,所以它就是 sRGB。

所以,如果你的檔案是以 Adobe RGB 或 Display P3 輸出,而描述檔在中途被丟掉——某個會重新編碼的流程、某個會清掉中繼資料的轉檔工具——那些廣色域的色彩數值就會被當成 sRGB 來讀。被擠進一個更窄的假設裡,它們出來就是飽和度掉下來的樣子,也就是你看到的變淡。哪些顏色遭殃取決於來源:一個 Adobe RGB 檔案被誤讀成 sRGB,綠色和青色會失去力道;Display P3 檔案還會連飽和的紅色一起垮掉。中性色幾乎不動:灰色的商品照完全沒事,珊瑚色泳衣就是災難。

先確認問題出在檔案,不是你的螢幕

把原檔和上傳後的圖,放在同一個瀏覽器視窗裡並排比對。

  • 在你的修圖軟體裡是對的,到瀏覽器裡變得平板:描述檔問題。
  • 在瀏覽器裡兩張一樣,但和修圖軟體裡不同:你的修圖軟體是用一個瀏覽器並不理會的工作空間在預覽。
  • 只有在你的手機或同事的筆電上不對:那是顯示器差異,不是檔案的問題。

接著把原檔拖進瀏覽器分頁——瀏覽器會尊重嵌入的描述檔。如果本機檔案是對的、上傳的那一張不是,那就是上傳流程把標記丟掉了。

查出檔案帶的是哪一個描述檔

  • macOS:用「預覽程式」開啟檔案,點工具列上的「簡介」按鈕(或按 Command-I),再看「更多資訊」分頁,那裡會列出圖片的色彩描述檔。
  • Photoshop:點文件狀態列上的箭頭,選「文件描述檔」。
  • Lightroom:輸出對話框裡的「色彩空間」下拉選單,才是你真正交出去的東西。
  • 任何檔案、任何平台:ExifTool 會印出來——exiftool -ProfileDescription photo.jpg。

以網頁用途來說,只要不是 sRGB,就是你的嫌犯。近幾代 iPhone 拍照時會以廣色域擷取,並據此標記檔案——Apple 在相機規格裡就列出「照片與 Live Photo 的廣色域擷取」。部分 Android 手機也提供廣色域拍攝選項,所以請直接查檔案。

轉換成 sRGB — 不要清除,也不要指定

三個聽起來很像的操作,做的事情天差地遠。

修圖軟體畫面特寫,螢幕上是陰影、中間調與高光的調色輪,旁邊還有一排調整滑桿

  • 清除會拿掉標籤、數值原封不動:廣色域資料現在保證會被當成 sRGB 讀,只會更糟。
  • 指定會換掉標籤但不重新計算,因此外觀會改變,而且通常變成錯的樣子。
  • 轉換會重新計算每一個像素,讓顏色在較小的空間允許的範圍內盡量維持原樣,然後附上 sRGB 標記。

轉換才是你要的那一個:Photoshop 的「編輯 › 轉換為描述檔」,或把 Lightroom 輸出設定裡的「色彩空間」設成 sRGB。最飽和的那幾個顏色會稍微位移,這是正常的。

反過來的狀況:截圖看起來太過鮮豔

同樣的機制,方向相反。從廣色域螢幕擷取的截圖,記錄的是該螢幕色彩空間裡的色彩數值。在 macOS 上拍的截圖通常會附上顯示器的描述檔;其他擷取工具就不一定會附。被當成 sRGB 讀回來時,同樣的數值渲染出來會更加飽和:螢光綠、曬傷般的膚色。解法一樣。

換背景的時候,這件事為什麼特別要緊

到了這裡,描述檔不符就不再是小事了。在 remover.bg 把去背圖放到你的品牌色上,再把那張圖擺到頁面上,旁邊放一塊用 CSS 指定同一組 hex 的色塊:CSS 的顏色會以 sRGB 渲染。

一只霧面黑色圓柱瓶由正上方拍攝,置中放在打光均勻的鮮紅色平面背景上

如果圖片帶著不同的標記,同一個顏色的兩種色調就會並排擺著、怎麼樣都對不起來。上傳前先轉成 sRGB,等於從源頭把這個模稜兩可拿掉。

純白經過轉換不會改變,所以光是描述檔不符,並不會讓你過不了電商平台的白底檢查——受害的是商品本身的顏色。格式也救不了你:PNG、JPEG 和 WebP 都會攜帶描述檔,標記一旦消失也都會被誤讀,透明去背圖同樣躲不掉。

下次上傳之前

把輸出的色彩空間設成 sRGB,一次就好,設在你真正在用的那組預設集裡,這個問題就不會再出現。然後在同一台螢幕上,拿一張上傳後的圖和原檔抽查比對:如果顏色守得住,你的流程就是乾淨的。

繼續閱讀