色彩反轉會將解碼後照片中的每個紅色、綠色和藍色位元組,以 255 減去原始通道值的方式替換,同時保持 alpha 通道不變。將這個簡單的規則套用到每個像素,就會把照片變成它的影像負片,並產生一個可供下載的靜態 PNG。這個轉換是完全確定性的,因此對同一張影像執行兩次會還原原始的解碼位元組,而且每個原色都會對應到固定的夥伴顏色:黑色變成白色,白色變成黑色,紅色變成青色,綠色變成洋紅色,藍色變成黃色。由於這個規則作用在原始位元組值上,而不是作用在感知色彩上,所以它不會線性化 gamma、模擬感知的互補色、修正曝光,也不會移除掃描負片上的橘色遮罩。它是一個乾淨、可逆的視覺效果,可在任何支援的照片上於本機執行,不需要帳號、上傳或訂閱。執行此操作的瀏覽器工具是 Lizely 的 反轉影像色彩 工具,而本文的其餘部分將說明每個顏色會變成什麼、反轉照片在什麼時候真正有用,以及如何在你已有的檔案上確實執行這個操作。

how to invert a photo color
how to invert a photo color

反轉照片色彩實際上代表什麼

當你反轉一張照片的色彩時,工具會透過瀏覽器的 Canvas API 讀取每個像素,將像素拆解成紅、綠、藍和 alpha 四個元件,並用互補值替換三個色彩位元組。對於每個像素來說,確切的規則都相同:輸出的紅色等於 255 減去輸入的紅色,輸出的綠色等於 255 減去輸入的綠色,輸出的藍色等於 255 減去輸入的藍色。Alpha 在複製時不做修改,因此完全透明的像素在結果中保持完全透明,半透明的像素在結果中也保持半透明。

因為這個規則是逐位元組套用的,所以執行兩次反轉會還原原始的解碼位元組。從數學上來看,對於介於 0 到 255 之間的任何位元組值 x,255 - (255 - x) = x,這就是為什麼這個效果是可逆的。這也代表不會有四捨五入、感知曲線或個別通道加權的問題;輸入 RGB (120, 80, 200) 會精準地變成 (135, 175, 55),因為 255 - 120 = 135,255 - 80 = 175,而 255 - 200 = 55。這個簡單的數學會在解碼後影像的每個像素上執行,然後再將結果編碼為靜態 PNG。

這個轉換僅限於瀏覽器分頁中執行。讀取、格式偵測、解碼、像素存取、位元組交換、預覽渲染以及 PNG 匯出都會在目前的裝置上完成,影像不會被上傳到 Lizely 或任何外部服務。當照片中含有草稿、私密文件、個人掃描或你不希望離開電腦的螢幕擷圖時,這點很重要。

反轉後每個顏色的對應關係

由於公式是固定的,照片中每個可見的顏色都有已知的目標結果。下表顯示最常見的參考顏色,以及反轉後各自變成什麼。這些對應關係是由位元組規則所定義,因此適用於任何解析度的任何照片,包括原本非常接近純原色的像素。

輸入顏色輸入 RGB輸出 RGB變成
純黑(0, 0, 0)(255, 255, 255)純白
純白(255, 255, 255)(0, 0, 0)純黑
純紅(255, 0, 0)(0, 255, 255)青色
純綠(0, 255, 0)(255, 0, 255)洋紅
純藍(0, 0, 255)(255, 255, 0)黃色
中灰色(128, 128, 128)(127, 127, 127)中灰色(暗一個刻度)
青色(0, 255, 255)(255, 0, 0)紅色
黃色(255, 255, 0)(0, 0, 255)藍色

中灰色是看起來違反直覺的對應關係:(128, 128, 128) 會反轉為 (127, 127, 127),視覺上仍然是灰色,但暗了一個位元組。對每個位元組值來說,255 減去 (255 減去 x) 等於 x,因此執行兩次反轉會還原相同的解碼位元組值。

什麼時候照片色彩反轉是有用的

色彩反轉不只是視覺上的趣味。許多日常任務都能從照片的乾淨負片中受益:

  • 為深色介面設計。 設計師在建立深色模式模型時,通常會從淺色模式的螢幕擷圖開始,並把反轉當作版面配置的快速初稿,把實際的色彩調色留到之後再處理。
  • 找出灰塵、刮痕和掃描瑕疵。 深色掃描影像上的微小亮點會變成淺色背景上的暗點,眼睛通常在照片負片上更容易辨識出來。
  • 製作可列印的鏤空模板。 一張淺色背景上有深色文字的照片,反轉後會變成深色背景加上原本文字位置的淺色「洞」,這是準備切割或列印模板的快速方法。
  • 近似的色盲檢查。 有些具有紅綠色視覺差異的使用者會覺得複雜圖表的反轉版本更容易閱讀;反轉是一種快速的方法,可以用來測試 UI 模型中的對比是否真正發揮作用。
  • 老照片中隱藏的細節。 反轉一張褪色的列印或曝光不良的掃描影像,可以拉出原本被遮蔽的邊緣對比。

若需要單純的選色而非反轉,影像選色器 可以搭配這個工具使用,報告反轉結果中任何像素的精確 HEX 和 RGB 值,讓讀者可以驗證某個特定色調變成了什麼。

如何逐步反轉照片的色彩

在任何現代的桌上型瀏覽器中開啟「反轉影像色彩」頁面,然後對你想要翻轉的照片執行下列三步驟流程。

  1. 選擇支援的檔案。 點擊檔案選擇器,並從你的電腦中選擇 PNG、JPEG、GIF 或 WebP。工具會檢查檔案實際的位元組容器,而不是信任副檔名或作業系統的 MIME 標籤。完整的 PNG 需要簽章、第一個 IHDR 結構和結尾的 IEND;JPEG 需要 SOI、其後的標記,以及結尾的 EOI;GIF 需要 GIF87a 或 GIF89a 標頭加上結尾標記;WebP 需要精確的 RIFF 位元組計數、WEBP 標記,以及一個有界的 VP8、VP8L 或 VP8X 第一個區塊。所回報的檔案大小必須最多 15 MiB,實際的 ArrayBuffer 長度會在讀取後再次檢查。請等待位元組容器偵測、透過 createImageBitmap 進行的瀏覽器解碼,以及尺寸驗證完成後再繼續。
  2. 執行反轉並比較預覽。 檔案解碼後,工具會以原始大小繪製到 Canvas 上,讀取完整的 ImageData,對每個像素套用 255 減去通道值的規則,然後將矩陣寫回。接著頁面會顯示來源預覽以及反轉結果的完整原始大小 PNG 預覽。並排比較以確認反轉看起來符合預期,並檢查頁面回報兩者的正向尺寸。
  3. 確認尺寸和輸出大小,然後下載。 頁面會回報輸入尺寸以及編碼後 PNG 輸出的精確位元組大小。如果尺寸看起來正確,且輸出最多 32 MiB,請點擊下載按鈕以儲存靜態 PNG。輸出永遠是完整的 PNG;不會靜默地調整大小、裁剪、取樣或局部處理。

檔案限制與動畫照片會發生什麼事

這個工具對輸入和輸出有各自精確的限制,而且它們存在的理由各不相同。輸入預算為 15 MiB,但壓縮的 JPEG、GIF 或 WebP 檔案可能會解壓縮成大得多的像素緩衝區,因此工具同時強制每邊最多 8,192 像素,以及總面積最多 24,000,000 像素的限制。超過這些限制一個位元組、一個邊緣像素或一個面積刻度,都會在結果發佈前被拒絕。精確的邊界值會被接受;超過則不行。

輸出預算獨立為 32 MiB,因為照片的完整 PNG 重新編碼通常會比其壓縮的 JPEG 或 WebP 來源大得多。頁面會在將輸出 Blob 轉為下載 URL 之前,檢查其非空值、有效大小,以及大小不超過 32 MiB,因此失控的編碼無法發佈截斷或超大的檔案。

動畫 GIF 和動畫 WebP 輸入會以刻意簡化的方式處理:瀏覽器解碼的第一幀會成為一張靜態 PNG。後續的幀、時間、循環、調色盤和銷毀行為都不會保留,因此當你需要保留動畫時,這個工具不是正確的選擇。請隨時保留原始檔案,因為當動畫、嵌入的設定檔或中繼資料很重要時,Canvas 匯出同樣不保證會保留 EXIF、GPS、註解、ICC 設定檔或其他來源中繼資料。

這個工具不做的事情

反轉影像色彩工具是一個確定性的位元組通道視覺效果,而不是色彩管理轉換,也不是底片負片修復。它不會線性化 gamma、模擬感知的互補色、移除掃描負片上的橘色遮罩、平衡褪色的列印、修正曝光或執行色調分級。它作用於瀏覽器 Canvas 實際回傳的 RGBA 位元組,這代表完全透明的顏色即使 RGB 部分已被處理,仍然保持不可見;該工具無法還原從未進入 ImageData 的隱藏來源檔案通道資料,瀏覽器解碼器或 Canvas 可能在 getImageData 回傳之前,將視覺上隱藏的 RGB 進行標準化。

PNG 匯出同樣不保證會保留 EXIF、GPS、註解、ICC 設定檔、出處或任何其他來源中繼資料。請將結果視為乾淨的視覺效果,而非忠實的歸檔副本,並將原始檔案與反轉後的輸出並存保存。若要對同一張照片執行其他操作,影像翻轉工具、像素化影像、模糊影像和影像疊加工具,可在同一個僅限瀏覽器的工作流程中涵蓋鏡像、像素化、模糊和合成。

相關閱讀:如何取得著色書影像並匹配其色彩

相關閱讀:使用可調式強度為照片新增濾鏡