Image Average Color Finder 每次在相同的瀏覽器中提供相同的檔案時,都會回傳相同的六位數十六進制值,因為它使用的是固定演算法 — 對取樣的 canvas 像素進行 alpha 加權算術平均,並在輸出時僅四捨五入一次 — 而非任何啟發式分群或感知推測。該工具會在您的瀏覽器分頁中本地解碼影像,將分析 canvas 上限設為 1,048,576 像素,忽略完全透明的像素,根據每個可見像素的 alpha 值對其紅、綠、藍通道進行加權,並將每個通道從 0 到 255 進行四捨五入。由於輸入與公式皆是固定的,只要輸入檔案、瀏覽器、解碼後尺寸、取樣尺寸,以及第一個解碼的動畫影格全部相符,回傳的十六進制值就能重現。這些輸入若有任何變動,輸出也會隨之改變,這就是為什麼不同的程式可能會針對同一張影像回報略有不同的十六進制值:因為它們在解決的是略有不同的問題。請將 Image Average Color Finder 作為您的參考基準,並將輸入與該值一併記錄下來,以便日後執行的結果能與先前的結果進行比較。

how do i repeat the same result when i use average color from image
如何重現從影像取得的平均色彩結果

影響平均色彩是否保持一致的因素

有五個變數會決定重複執行的結果是否與上一次一致,而當需要可重現性時,這些變數都是您應該記錄的一部分。

變數它如何影響十六進制值
來源檔案的位元組即使僅有一個像素改變 — 例如 JPEG 重新壓縮、PNG 經過編輯、GIF 影格被更換 — 都會改變通道的總和,進而改變四捨五入後的平均值。
瀏覽器與引擎不同瀏覽器在解碼 JPEG 色度、PNG 濾鏡以及 AVIF 影格時會有些微差異,因此相同的來源位元組在 canvas 上可能會產生略有不同的 RGBA 像素。
解碼後尺寸像素數在 1,048,576 或以下的檔案會以其解碼後的尺寸讀取;較大的檔案則會按比例縮放,使分析 canvas 維持在該像素預算以內。唯有當來源與取樣尺寸皆相符時,兩次執行才會一致。
動畫影格動畫 GIF、WebP 和 AVIF 輸入是從瀏覽器初次解碼結束時所曝光的影格進行取樣;重新載入或擷取較晚的影格會產生不同的平均值。
色彩管理廣色域顯示器與支援 ICC 的 canvas 可能在平均運算執行之前重新映射 RGB,進而改變通道總和。

只要這些變數在兩次執行之間有任何變動,十六進制值也會跟著改變。請將該值視為某個特定設定的指紋,而非影像本身的屬性。

十六進制值背後的精確計算

該工具會對 canvas 的 RGBA 資料執行 alpha 加權算術平均。對於每個 alpha 值非零的取樣像素,其紅、綠、藍通道會分別乘上該像素的 alpha 值。接著,三個加權後的總和會除以所有取樣 alpha 值的總和,並將每個商數四捨五入一次為 0 到 255 之間最接近的整數。完全透明的像素不會貢獻任何值,因為其儲存的 RGB 通道是不可見的,且可能包含任意的編碼器資料;部分透明的像素則會按其不透明度比例進行貢獻。所回報的 alpha 覆蓋率是取樣的 alpha 總和除以該取樣範圍中最大可能的 alpha 值。

由於規則相當明確,我們可以用一個小範例來手動驗算。以一個 2x2 的 canvas 為例,其像素如下:

  • 像素 A:RGB(255, 0, 0),alpha 1.0
  • 像素 B:RGB(0, 0, 255),alpha 1.0
  • 像素 C:RGB(0, 255, 0),alpha 0.5
  • 像素 D:RGB(128, 128, 128),alpha 0.0(忽略)

加權通道總和與 alpha 總和:

  • R 總和 = 255·1.0 + 0·1.0 + 0·0.5 = 255
  • G 總和 = 0·1.0 + 0·1.0 + 255·0.5 = 127.5
  • B 總和 = 0·1.0 + 255·1.0 + 0·0.5 = 255
  • α 總和 = 1.0 + 1.0 + 0.5 = 2.5

相除並四捨五入:

  • R 平均 = 255 / 2.5 = 102
  • G 平均 = 127.5 / 2.5 = 51
  • B 平均 = 255 / 2.5 = 102

RGB(102, 51, 102) 會轉換為 #663366,這就是該工具在這個完全相同的設定下會顯示的十六進制值。只要使用相同的輸入條件重複計算,就會得到相同的十六進制值,因為這個數學運算是確定性的。MDN getImageData 參考資料 描述了本實作所讀取的標準 8 位元 RGBA 像素介面。

重現從影像取得的平均色彩結果

  1. 選擇支援的檔案格式 — PNG、JPEG、WebP、GIF、BMP 或 AVIF — 並在兩次執行之間保持原始位元組不變。即使是可見內容看起來相同,從編輯器重新匯出仍會改變像素總和,因此請儲存原始檔案而非編輯後的副本。
  2. 等待相同瀏覽器中的本地解碼完成。該工具會使用瀏覽器本身的解碼器來讀取影像,因此從一個瀏覽器切換到另一個可能會改變 JPEG 和 AVIF 等格式的取樣像素。請在兩次執行中使用相同的瀏覽器與版本。
  3. 請查看結果旁顯示的來源與取樣尺寸,並確認它們與您先前執行的數值相符。若來源尺寸因檔案以不同大小重新匯出而產生變化,取樣 canvas 也會不同,十六進制值也會跟著改變。
  4. 點擊顯示的十六進制值以進行複製。剪貼簿會接收恰好一個井字號加上六個小寫十六進制數字;若剪貼簿權限被拒絕,該值仍會顯示在頁面上且可選取,工具並不會錯誤地宣稱複製成功。
  5. 將回傳的十六進制值連同來源檔名、瀏覽器、來源尺寸、取樣尺寸以及執行日期一併記錄下來,以便未來進行比較時能擁有該設定的完整指紋。

若您想驗證稍後記錄的兩個十六進制值是否真的與原本相同,可將它們輸入 Color Difference Calculator;若該 CIEDE2000 值接近零,代表這兩個十六進制字串所指的是感知上相同的色彩。

記錄所有會影響十六進制值的輸入

可重現的執行是指您日後能夠重新建構的執行,因此請擷取那些會改變變動平均值的輸入,而非僅記錄最終的數字。單一結果的最低指紋包含五個欄位:

欄位為何會影響十六進制值
來源檔名與位元組用於識別所使用的確切檔案;即使像素完全相同,重新匯出仍會產生不同的平均值。
瀏覽器與版本解碼器會因引擎而異;AVIF 與 JPEG 色度子取樣是常見的單通道漂移來源。
來源尺寸決定該檔案是以原生大小讀取,還是縮減取樣至 1,048,576 像素的 canvas 預算。
取樣尺寸實際執行平均運算的 canvas;該工具會同時顯示來源與取樣尺寸,使近似過程一目了然。
回傳的十六進制值與日期用於比較的數值,並加上時間戳記一併擷取,以免因時間過久而不知不覺地使記錄失效。

若輸入為動畫檔案,請額外記錄瀏覽器在解碼時所曝光的影格,因為重新載入相同的動畫檔案可能會顯示不同的第一個影格。若想尋找與本清單搭配良好的指南,請參閱 如何檢查影像的平均色彩結果。

會中斷可重現執行的限制

某些輸入完全不會產生任何十六進制值,而這本身也是可重現性的一部分:缺乏數值的情況也應該能夠重現。該工具會在以下情況拒絕檔案:檔案為空、瀏覽器無法解碼該格式、canvas 無法使用、解碼後任一邊緣超過 20,000 像素、解碼後總像素數超過 4,000 萬、檔案大於 20 MB,或是經 alpha 過濾後沒有任何可見像素。在每一種錯誤情況下,介面都會顯示明確訊息,且畫面上不會留下任何過時的十六進制值。若重複執行時遇到相同的限制,會回傳相同的錯誤,而這種一致性正是該工作流程可被稽核的原因之一。

為何其他程式會回傳不同的十六進制值

這份合約相當明確:這是瀏覽器 canvas 色彩資料中的算術平均,而非主色分群模型,也非感知模型。一個對完整解析度像素進行取樣(而非對縮減取樣後的 canvas)的程式會加總更多像素;採用 gamma 感知或感知數學的程式會以不同方式為通道加權;逐一走訪動畫每一個影格的程式所回報的平均值,會與本工具所使用的第一個影格取樣不同;在色彩管理管線下執行的程式則會在平均之前重新映射通道。這些做法本身並無對錯,但它們回答的是不同的問題,因此唯有在了解背後的數學與輸入時,比較兩個十六進制值才有意義。當兩個十六進制值來自不同的管線時,它們之間的定性關係(更暖、更冷、更暗、更亮、飽和度更高或更低)會比數字上的原始差異更為可靠。

該工具最適合用於粗略的背景配對、預設樣式設定、縮圖摘要、設計盤點以及快速的視覺比較,但不應被視為品牌合規性、無障礙對比、印刷配色、油漆配色或感知相似性的證明。若要進行文字對比,請使用 Color Contrast Checker;若要使用明確的色彩差異度量,請使用 Color Difference Calculator。