反轉影像顏色是在位元層級將每個紅色、綠色和藍色通道替換為其互補值,對每個通道套用 output = 255 減去 input 的公式,同時保留 alpha 通道不變。當套用於完全不透明的來源時,這條規則會將黑色變成白色、白色變成黑色、紅色變成青色、綠色變成洋紅色、藍色變成黃色,過程中不涉及任何感知校正、gamma 調整或底片遮罩移除。想要在點陣圖(例如 JPG、PNG、GIF 或 WebP)上產生此效果的 Figma 使用者,無法直接在 Figma 內套用,因為 Figma 的原生色彩控制項作用於填色、描邊和圖層效果,而不是作用於匯入點陣圖內部的像素資料。可靠的做法是先從 Figma 匯出影像,在本機執行以瀏覽器為基礎的 RGB 反轉,然後將新的靜態 PNG 以替換圖層的方式拖回同一個 Figma 檔案。

how to invert image colors in figma
在 Figma 中反轉影像顏色:本機瀏覽器方法

為什麼 Figma 無法自行反轉點陣圖

Figma 將匯入的點陣圖視為不透明的像素容器。你可以移動、調整大小、遮罩、以圖層不透明度混合它們,並套用整個圖層的混合模式(例如 Difference 或 Invert),但 PNG、JPEG、GIF 或 WebP 內部的底層位元值會保持你置入時的狀態不變。原生的圖層混合模式會將像素與圖框中位於其下方的內容重新組合,並不會改寫儲存的位元。

真正的位元層級反轉只會發生在向量填色、描邊、文字,以及 Figma 自有圖層上一小組效果上。一旦你將手機拍攝的 JPG、PNG 螢幕截圖,或從行銷匯出的 WebP 放到 Figma 畫布上,你就已經將顏色鎖定在固定的點陣位元中。設計師會求助外掛,或更常見地,先在 Figma 外部編輯檔案,再將其換回來。

反轉影像顏色工具正好符合那個外部編輯的步驟。它會讀取實際的位元容器,透過瀏覽器解碼第一個影格,對 Canvas 所公開的每個 RGBA 位置套用公式,並以原始尺寸匯出靜態 PNG。不會上傳任何內容,不會由伺服器重新壓縮,也不會在未經你許可的情況下取樣或調整大小。

先將影像從 Figma 匯出

先在 Figma 內匯出你想要反轉的影像。在 Layers 清單中選取該圖層,然後在右側面板中選擇 Export。為了讓工具的容器檢查通過,請選擇最接近你要反轉之來源的格式:

  • 如果你的來源具有透明度或銳利邊緣(例如 UI 螢幕截圖、圖示或貼圖),請選擇 PNG
  • 對於相片和雜訊較多的產品照片,請選擇 JPEG,並接受失真壓縮的權衡取捨。
  • 當來源是動畫 GIF,而你只想要第一個影格反轉後的靜態預覽時,請選擇 GIF
  • 當來源是具有透明度的現代網頁匯出檔時,請選擇 WebP

請將匯出維持在原始解析度。反轉工具會拒絕任一解碼邊超過 8,192 像素,或總像素面積超過 24,000,000 的檔案,因此 4K 或 8K 相片完全可能在進行任何反轉之前就被拒絕。如果你的匯出檔案太大,請先使用 Image Resizer 流程將圖層縮小,或裁切掉多餘的邊緣,再進行匯出。

使用瀏覽器工具在本機反轉影像

一旦檔案存到磁碟後,反轉本身只需三個操作步驟,並且全程都在你目前的瀏覽器分頁內完成。

  1. 開啟反轉影像色頁面,選擇 PNG、JPEG、GIF 或 WebP 檔案。等待位元容器偵測、瀏器解碼和尺寸驗證完成,且未出現任何錯誤。
  2. 工具會反轉解碼後的第一個影格,並並排顯示兩個原始尺寸的 PNG 預覽:一邊是來源,另一邊是反轉後的結果。請加以比較,以確認效果符合你想要的樣貌。
  3. 確認尺寸和回報的輸出位元大小,然後下載靜態 PNG。檔案會以真正的 PNG 容器和原始像素尺寸,儲存到你的下載資料夾。

下載是透過 Canvas 的 toBlob 流程進行,因此輸出會是一個完整的 PNG,絕不會是不完整的檔案,也不會是被悄悄降階成 JPEG 的檔案。如果反轉因某項防護(例如 null Blob、輸出超過 32 MiB,或同步例外)而失敗,忙碌狀態會清除,不會留下任何過期的下載,讓你可以放心地重新執行該步驟。

將反轉後的 PNG 放回 Figma 中使用

將下載的 PNG 直接拖入開啟中的 Figma 檔案。Figma 會將其視為一個全新的點陣圖圖層,反轉後的顏色已經烘焙到像素中。將新圖層置於原始圖層之上,為其重新命名以利辨識,並在確認替換後的結果符合你的圖框版面配置後,隱藏或刪除來源圖層。

如果原始影像位於元件或鎖定的圖框中,請將新圖層放在同一個圖框上,然後在來源上按右鍵並將其移至最下層,或在使用移動工具複製其變形屬性後將其刪除。偏好非破壞性往返流程的設計師,通常會將來源圖層設為靜音,並在其上方使用反轉圖層,這樣檔案就能在不重新執匯出的情況下進行切換。

對於已經使用共用元件的大型畫板或設計系統,一個乾淨的做法是將反轉後的 PNG 儲存到 Figma 素材庫,或儲存到已連線的團隊素材庫,讓每個消費端圖框都能拉到同一個反轉版本。

色彩對應規則,以表格呈現

反轉規則與 Figma 用於向量填色和描邊的位元層級運算相同。因為它是位元運算而非感知運算,所以下表的對應是精確的:

來源顏色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)接近中間灰,差一個位元

最後一列是有意設計的:真正的中間灰位元是 128,而 255 減 128 得到 127,不是 128。位元規則不會對齊到完美的鏡像,而是產生字面上的互補位元。因此,對同一組解碼位元執行兩次反轉,會還原為原本的值,這是最簡單的方式來確認該演算法是位元精確的,而非近似值。

開始前必須知道的檔案、邊界與像素限制

有四項獨立的限制會決定工具接受或拒絕你的檔案。全部都在精確的邊界進行檢查,只要超出位元或像素一個單位,就會遭到拒絕:

限制數值檢查位置
輸入檔案大小最大 15 MiB回報的 File size 與實際的 ArrayBuffer 長度
解碼邊長每邊最大 8,192 像素在 createImageBitmap 回報尺寸之後
解碼總面積最大 24,000,000 像素解碼點陣圖的寬度乘以高度
輸出 PNG 大小最大 32 MiB在 Canvas 將結果編碼之後

15 MiB 的輸入預算和 32 MiB 的輸出預算是刻意分開的,因為一旦每個像素都完全不透明,解碼後的 PNG 大小可能會膨,特別是對於雜訊較多的相片。如果反轉後的 PNG 超過 32 MiB,工具會在發佈 URL 之前讓匯出失敗,因此你絕不會看到寫到一半的檔案,或被悄悄以失真的 JPG 取代 PNG。

容器檢查同樣在位元層級上嚴格執行。工具不會信任檔名、檔案選擇器的篩選條件,或作業系統的 MIME 標籤。它會驗證 PNG 的簽章加上 IHDR 與結尾的 IEND、JPEG 的 SOI、隨後的標記與結尾的 EOI、GIF87a 或 GIF89a 的標頭加上 logical-screen 結構與 trailer,或是 WebP 的 RIFF 大小加上 WEBP 標記以及一個有界範圍的 VP8、VP8L 或 VP8X 第一個區塊。魔術位元被截斷、被重新命名的任意檔案,以及不支援的格式(例如 SVG、AVIF、HEIC、BMP、TIFF 或 PDF),都會在 Canvas 開始工作之前就失敗。

這個效果是什麼,不是什麼

反轉是一種位元通道的視覺效果,不是色彩管理轉換,也不是底片負片修復。它不會線性化 gamma、不會建模感知互補色彩、不會移除掃描檔中的橙色遮罩、不會校正曝光,也不會進行色調分級。EXIF 方向標籤、GPS、ICC 色彩設定檔、註解以及其他來源中繼資料,都不會被帶入 PNG 匯出檔中,因為 Canvas 的像素匯出不會保留它們。當動畫、嵌入的設定檔或中繼資料很重要時,請保留原始檔案。

動畫 GIF 和動畫 WebP 輸入會使用瀏覽器解碼後的第一個影格,並成為單一的靜態 PNG。後續的影格、時間、循環、調色盤和銷毀行為都不會被保留,這對於目標是為 Figma 圖層產生單一反轉圖形的用途來說,是正確的行為。如果你需要在動畫流程中取得反轉結果,請先使用 GIF Splitter 將來源分割成影格,反轉每個圖塊,然後使用 GIF 製作工具將它們重新組合起來。

本機瀏器處理有助於私,但成功的解碼並非惡意程式分析、內容審查、作者身分驗證,也不能證明影像可安全使用。請將輸出視為你所產生的位元,而非關於來源的證據。

相關閱讀:在 Canva 中從影像中挑選顏色:4 個快速步驟