為什麼將灰階 SVG 轉換為 Alpha 時亮度會降低?
P粉986937457
P粉986937457 2024-02-26 18:01:19
0
1
291

我正在嘗試使用 SVG 創建透明的“星夜”效果。我將 SVG 內嵌在網頁上的黑色背景元素內。我從湍流過濾器開始,然後應用顏色矩陣以獲得所需的效果:

<svg xmlns="http://www.w3.org/2000/svg">
    <filter id="filter">
        <feTurbulence baseFrequency="0.2" />
        <feColorMatrix values="
            0 0 0 1 -.5
            0 0 0 1 -.5
            0 0 0 1 -.5
            0 0 0 0 1" />
    </filter>
    <rect width="100%" height="100%" filter="url(#filter)" />
</svg>

...給出:

但這沒有 alpha 透明度;我希望它代表白色像素的平面,其亮度僅透過位於黑色背景上且不透明度較小而降低。所以我將其通過第二個過濾器來執行此操作:

<svg xmlns="http://www.w3.org/2000/svg">
    <filter id="filter">
        <feTurbulence baseFrequency="0.2" />
        <feColorMatrix values="
            0 0 0 1 -.5
            0 0 0 1 -.5
            0 0 0 1 -.5
            0 0 0 0 1" />
        <feColorMatrix values="
            0 0 0 0 1
            0 0 0 0 1
            0 0 0 0 1
            1 1 1 0 0" />
    </filter>
    <rect width="100%" height="100%" filter="url(#filter)" />
</svg>

...給出:

這非常相似,但稍微暗一點。為什麼稍微暗一點?當覆蓋在黑色背景上時,從邏輯上講,它不應該產生相同的像素顏色嗎?

P粉986937457
P粉986937457

全部回覆(1)
P粉432930081

正如羅伯特在上面指出的,色彩空間轉換會產生一些奇怪的現象。在第二個顏色矩陣之後,像素實際上應該會更亮。看來您可以透過新增一個額外的 feComponentTransfer(以 SQRT(1/2.2) 作為指數值)來解決此問題。


    
     
    
   
     
  
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板