我
網(wǎng)站制作過程中,幾乎網(wǎng)絡上的所有顏色(從普通 PNG 文件中的數(shù)據(jù)到 CSS 和 SVG 中的十六進制值)都不是以實際顏色強度表示的,而是使用稱為“8 位sRGB ”的有損壓縮算法。大多數(shù)人稱其為“顏色空間”,但其主要目的是以比存儲與光強度相對應的實際數(shù)字亮度值所需的更少位來表示顏色數(shù)據(jù)。因此,將其視為一種有損壓縮技術更為有用。
不幸的是,通過將其稱為“顏色空間”,我們誤導了絕大多數(shù)開發(fā)人員相信您可以對 sRGB 顏色進行數(shù)學運算,并且通過將原始 sRGB 數(shù)字暴露給用戶,我們誤導了他們認為這些數(shù)字有合理的意義。就像你不能在不解壓縮的情況下混合兩個 MP3 文件的位*并期望得到聽起來像兩種聲音正確混合在一起的東西一樣,你不能取兩個 sRGB 顏色值,混合它們,然后期望得到正確的顏色。然而,這是每個主要瀏覽器所做的。
處理 sRGB 數(shù)據(jù)的正確方法是先將其轉(zhuǎn)換為線性 RGB 值,然后對其進行處理,然后在需要時將其轉(zhuǎn)換回 sRGB。如果您直接對 sRGB 顏色數(shù)據(jù)進行任何數(shù)學運算,您的代碼將被破壞。請不要那樣做。現(xiàn)在是 2022 年;是時候讓計算機圖形正常工作了。
有一個color-interpolationSVG 屬性可以解決這個問題,本頁嘗試使用它。不幸的是,還沒有瀏覽器實現(xiàn)它。該屬性于2003年首次在SVG 1.1中指定。我們即將推出 20 年不費心實現(xiàn)正確顏色混合的瀏覽器。
值得一提的是,GPU 制造商和大多數(shù)游戲開發(fā)者早就意識到了這一點,因為現(xiàn)實環(huán)境需要線性處理,尤其是具有復雜效果的環(huán)境?,F(xiàn)代 GPU 在加載和渲染圖像時可以透明地從/轉(zhuǎn)換為sRGB,而不會造成任何性能損失。當使用損壞的設計工具的設計師發(fā)現(xiàn)正確實現(xiàn)的游戲引擎中的東西看起來不同時,這最終會導致痛苦。