首页 > 代码库 > 学习SVG系列(4):SVG滤镜效果

学习SVG系列(4):SVG滤镜效果

注意:Internet Explorer和Safari不支持SVG滤镜

<defs>、<filter>

所有互联网的SVG滤镜定义在<defs>元素中,<filter>标签用来定义SVG滤镜,<filter>标签使用必须的ID属性来定义向图形应用到那个滤镜中

 

SVG模糊效果

<feGaussianBlur>

feGaunssianBlur元素是用于创建模糊效果

 

SVG代码:

<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
  <defs>
    <filter id="f1"x="0" y="0">
     <feGaussianBlur in="SourceGraphic" stdDeviation="15"/>
    </filter>
  </defs>
  <rect width="90"height="90" stroke="green" stroke-width="3"
  fill="yellow"filter="url(#f1)" />
</svg>

代码解析:

    <filter>元素id属性定义一个滤镜的唯一名称

    <feCaussianBlur>元素定义模糊效果

    in="SourceGraphic"这个部分定义了由整个图像创建效果

    stdDeviation属性定义模糊量

    <rect>元素的滤镜属性用来把元素链接到“f1”滤镜

 

SVG阴影

<feOffset>

feOffset元素用于创建阴影效果

实例1

偏移一个矩形(带<feOffset>),然后混合偏移图像顶部(含<feBlend>)

 

SVG代码:

<svg xmlns="http://www.w3.org/2000/svg"version="1.1">
  <defs>
    <filter id="f1"x="0" y="0" width="200%"height="200%">
      <feOffsetresult="offOut" in="SourceGraphic" dx="20"dy="20" />
      <feBlendin="SourceGraphic" in2="offOut" mode="normal"/>
    </filter>
  </defs>
  <rect width="90"height="90" stroke="green" stroke-width="3"
  fill="yellow"filter="url(#f1)" />
</svg>

 

实例2

偏移图像可以变的模糊(含<feGaussianBlur>)

 

SVG代码:

<svgxmlns="http://www.w3.org/2000/svg" version="1.1">
  <defs>
    <filter id="f1"x="0" y="0" width="200%"height="200%">
      <feOffsetresult="offOut" in="SourceGraphic" dx="20"dy="20" />
     <feGaussianBlur result="blurOut" in="offOut"stdDeviation="10" />
      <feBlendin="SourceGraphic" in2="blurOut" mode="normal"/>
    </filter>
  </defs>
  <rect width="90"height="90" stroke="green" stroke-width="3"
  fill="yellow"filter="url(#f1)" />
</svg>

代码解析

    元素的stdDeviation属性定义了模糊量

 

实例3

制作一个黑色的阴影

 

SVG代码:

<svgxmlns="http://www.w3.org/2000/svg" version="1.1">
  <defs>
    <filter id="f1" x="0"y="0" width="200%" height="200%">
      <feOffsetresult="offOut" in="SourceAlpha" dx="20"dy="20" />
     <feGaussianBlur result="blurOut" in="offOut"stdDeviation="10" />
      <feBlendin="SourceGraphic" in2="blurOut" mode="normal"/>
    </filter>
  </defs>
  <rect width="90"height="90" stroke="green" stroke-width="3"
  fill="yellow"filter="url(#f1)" />
</svg>

代码解析:

         feOffset元素的属性改为"SourceAlpha"在Alpha通道使用残影,而不是整个RGBA像素

 

实例4

为阴影涂上一层颜色

 

SVG代码:

<svgxmlns="http://www.w3.org/2000/svg" version="1.1">
  <defs>
    <filter id="f1"x="0" y="0" width="200%"height="200%">
      <feOffsetresult="offOut" in="SourceGraphic" dx="20"dy="20" />
      <feColorMatrixresult="matrixOut" in="offOut" type="matrix"
      values="0.20 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" />
      <feBlendin="SourceGraphic" in2="blurOut" mode="normal"/>
    </filter>
  </defs>
  <rect width="90"height="90" stroke="green" stroke-width="3"
  fill="yellow"filter="url(#f1)" />
</svg>

学习SVG系列(4):SVG滤镜效果