SVG 濾鏡

SVG 允許我們使用與點陣圖描述語言類似的工具,例如陰影、模糊效果,甚至合併不同濾鏡的結果。透過 <filter> 元素,可以新增這些效果並稍後將它們附加到物件上。

濾鏡的作用類似於圖層。建立它們時,請嘗試逐步應用和測試效果。

此元素具有不同的屬性,可幫助我們建立剪輯區域。在 filter 標籤之間,我們可以定義允許我們實現所需效果的基元。這些基元之一是 <feGaussianBlur>。關鍵字 SourceAlpha 標識此基元的輸入,在本例中為 in 輸入。模糊量透過 stdDeviation 屬性進行設定。

SVG 濾鏡示例

html
<defs>
  <filter id="drop-shadow">
    <feGaussianBlur in="SourceAlpha" stdDeviation="3" />
  </filter>
</defs>

<g id="ghost" filter="url(#drop-shadow)">
  <!--Ghost drawing in here-->
</g>

上面的示例不會產生期望的輸出。相反,我們需要新增更多濾鏡基元來產生期望的渲染。透過新增 feoffsetresult,可以定義效果圖層。

<result> 屬性是一個可供以後引用的引用。它與 XML ID 有很大不同,並且只能在實際的 filter 內部引用。<feoffset> 基元具有高斯模糊的模糊結果。<feMerge> 基元包含 <feMergeNode> 節點,這些節點將 offsetBlur 的結果作為輸入,這將允許它出現在 sourceGraphic 下方。

實現更多基元

html
<defs>
  <filter id="drop-shadow">
    <feGaussianBlur in="SourceAlpha" stdDeviation="3" result="blur" />
    <feoffset in="blur" dx="4" dy="4" result="offsetBlur" />
    <feMerge>
      <feMergeNode in="offsetBlur" />
      <feMergeNode in="SourceGraphic" />
    </feMerge>
  </filter>
</defs>