首页 > 代码库 > 学习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滤镜效果