當前位置:
首頁 > 知識 > SVG的 陰影

SVG的 陰影

注意:Internet Explorer和Safari不支持SVG濾鏡!



<defs> 和 <filter>

所有互聯網的SVG濾鏡定義在<defs>元素中。<defs>元素定義短並含有特殊元素(如濾鏡)定義。

<filter>標籤用來定義SVG濾鏡。<filter>標籤使用必需的id屬性來定義向圖形應用哪個濾鏡?



SVG <feOffset>

實例 1

<feOffset>元素是用於創建陰影效果。我們的想法是採取一個SVG圖形(圖像或元素)並移動它在xy平面上一點兒。

第一個例子偏移一個矩形(帶<feOffset>),然後混合偏移圖像頂部(含<feBlend>):

SVG的 陰影

下面是SVG代碼:

實例

<svg xmlns="http://www.w3.org/2000/svg" version="1.1">

<defs>

<filter id="f1" x="0" y="0" width="200%" height="200%">

<feOffset result="offOut" in="SourceGraphic" dx="20" dy="20" />

<feBlend in="SourceGraphic" in2="offOut" mode="normal" />

</filter>

</defs>

<rect width="90" height="90" stroke="green" stroke-width="3"

fill="yellow" filter="url(#f1)" />

</svg>

嘗試一下 ?

對於Opera用戶: 查看SVG文件(右鍵單擊SVG圖形預覽源)。

代碼解析:

  • <filter>元素id屬性定義一個濾鏡的唯一名稱

  • <rect>元素的濾鏡屬性用來把元素鏈接到"f1"濾鏡


實例 2

現在,偏移圖像可以變的模糊(含 <feGaussianBlur>):

SVG的 陰影

下面是SVG代碼:

實例

<svg xmlns="http://www.w3.org/2000/svg" version="1.1">

<defs>

<filter id="f1" x="0" y="0" width="200%" height="200%">

<feOffset result="offOut" in="SourceGraphic" dx="20" dy="20" />

<feGaussianBlur result="blurOut" in="offOut" stdDeviation="10" />

<feBlend in="SourceGraphic" in2="blurOut" mode="normal" />

</filter>

</defs>

<rect width="90" height="90" stroke="green" stroke-width="3"

fill="yellow" filter="url(#f1)" />

</svg>

嘗試一下 ?

對於Opera用戶: 查看SVG文件(右鍵單擊SVG圖形預覽源)。

代碼解析:

  • <feGaussianBlur>元素的stdDeviation屬性定義了模糊量


實例 3

現在,製作一個黑色的陰影:

SVG的 陰影

下面是SVG代碼:

實例

<svg xmlns="http://www.w3.org/2000/svg" version="1.1">

<defs>

<filter id="f1" x="0" y="0" width="200%" height="200%">

<feOffset result="offOut" in="SourceAlpha" dx="20" dy="20" />

<feGaussianBlur result="blurOut" in="offOut" stdDeviation="10" />

<feBlend in="SourceGraphic" in2="blurOut" mode="normal" />

</filter>

</defs>

<rect width="90" height="90" stroke="green" stroke-width="3"

fill="yellow" filter="url(#f1)" />

</svg>

嘗試一下 ?

對於Opera用戶: 查看SVG文件(右鍵單擊SVG圖形預覽源)。

代碼解析:

  • <feOffset>元素的屬性改為"SourceAlpha"在Alpha通道使用殘影,而不是整個RGBA像素。


實例 4

現在為陰影塗上一層顏色:

SVG的 陰影

下面是SVG代碼:

實例

<svg xmlns="http://www.w3.org/2000/svg" version="1.1">

<defs>

<filter id="f1" x="0" y="0" width="200%" height="200%">

<feOffset result="offOut" in="SourceGraphic" dx="20" dy="20" />

<feColorMatrix result="matrixOut" in="offOut" type="matrix"

values="0.2 0 0 0 0 0 0.2 0 0 0 0 0 0.2 0 0 0 0 0 1 0" />

<feGaussianBlur result="blurOut" in="matrixOut" stdDeviation="10" />

<feBlend in="SourceGraphic" in2="blurOut" mode="normal" />

</filter>

</defs>

<rect width="90" height="90" stroke="green" stroke-width="3"

fill="yellow" filter="url(#f1)" />

</svg>

嘗試一下 ?

對於Opera用戶: 查看SVG文件(右鍵單擊SVG圖形預覽源)。

代碼解析:

  • <feColorMatrix>過濾器是用來轉換偏移的圖像使之更接近黑色的顏色。 "0.2"矩陣的三個值都獲取乘以紅色,綠色和藍色通道。降低其值帶來的顏色至黑色(黑色為0)

SVG 模糊效果 – 高斯模糊

SVG 漸變 – 線性

1 篇筆記

  1. smilenow

    257***1053@qq.com

    參考地址

    變換矩陣的定義和說明

    feColorMatrix 的 matrix 是一個 4*5 的矩陣。前面 4 列是顏色通道的比例係數,最後一列是常量偏移。

SVG的 陰影

  1. 上面公式中的 rr 表示 red to red 係數,以此類推。c1~c4 表示常量偏移。

    第一個 4*5 矩陣為變換矩陣,第二個單列矩陣為待變換對象的像素值。右側單列矩陣為矩陣 1 和 2 的點積結果。

    這個變換矩陣看起來比較複雜,在實踐上常使用一個簡化的對角矩陣,即除了 rr/gg/bb/aa 取值非零外,其餘行列取值為 0,這就退化成了簡單的各顏色通道的獨立調整。

    feColorMatrix的語法:

    <filter id="f1" x="0%" y="0%" width="100%" height="100%">
    <feColorMatrix
    result="original" id="c1" type="matrix"
    values="1 0 0 0 0
    0 1 0 0 0
    0 0 1 0 0
    0 0 0 1 0" /> </filter>

    上述feColorMatrix過濾器的類型值為matrix,除此之外,還有saturate(飽和度)和hueRotate(色相旋轉),取值比較簡單,這裡不做說明。

    顯然當變換矩陣為單位對角矩陣時,變換結果和原值相等。

    我們可以嘗試調整比例係數,比如把rr的值設置為0,即去除圖像中的red顏色通道含量:

SVG的 陰影

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員小新人學習 的精彩文章:

Memcached stats items 命令
XLink 和 XPointer 編程

TAG:程序員小新人學習 |