SVG—06-模糊和阴影效果

539 阅读2分钟

概要总结

    1、<defs>、<filter>、<feGaussianBlur>标签

    2、实现模糊效果

    3、\feOffset>、标签

    4、实现阴影效果

一、<defs>、<filter>、<feGaussianBlur>标签

    1、<filter>标签

        给SVG图形添加特殊效果,需要通过filter元素来实现。filter是过滤器的意思,它是一个双标签,filter元素里面包含一个或多个效果滤镜,filter元素有一个必要的id属性,用于识别过滤器,图形通过这个id指向要使用的过滤器。

    2、<defs>标签

        filter元素都是在defs元素中定义的,defs元素是definitions的简称,它也是一个双标签。

    3、<feGaussianBlur>标签

        模糊效果可以通过feGaussianBlur滤镜来创建,它是一个高斯模糊效果,它需要定义在filter标签里面,是一个单标签。feGaussianBlue通过stdDeviation属性定义模糊的数量,值是一个数字,值越大模糊的程度就越高。

image.png

二、实现模糊效果

    1、绘制一个矩形

<svg width="110" height="110" style="background: #eee">
  <rect width="90" height="90" stroke="green" stroke-width="3" fill="yellow"/>
</svg>

image.png

    2、添加高斯模糊效果

        通过<defs>、<filter>、<feGaussianBlur>三个标签组合和stdDeviation属性,实现高斯模糊效果。

<svg width="110" height="110" style="background: #eee">
  <defs>
    <filter x="0" y="0">
      <feGaussianBlur stdDeviation="15"/>
    </filter>
  </defs>
  
  <rect width="90" height="90" stroke="green" stroke-width="3" fill="yellow"/>
</svg>

    3、效果与图形关联

        模糊滤镜定义好之后,需要应用到图形上。首先在filter标签上添加一个id属性为f1,然后在rect标签上添加filter属性值为url(#f1)。

        注意:图形上的filter属性值需要对应标签的id属性值,这样它们才能关联起来。

        通过<defs>、<filter>、<feGaussianBlur>三个标签组合和stdDeviation属性,实现高斯模糊效果。

    4、代码演示

image.png

三、<feOffset>、<feBlend>标签

    1、<feOffset>标签

        阴影效果可以通过feOffset滤镜和feBlend滤镜来实现,其原理是将一个SVG图形、图像或元素,在xy平面上做一定的偏移。

        它需要定义在filter标签里面,是一个单标签。它有3个属性:

        (1)dx:值是一个数字,表示阴影在x轴上的偏移量;

        (2)dy:值是一个数字,表示阴影在y轴上的偏移量。

        (3)in:表示阴影图像的来源。如果定义一个黑色的阴影,值可以设置为SourceAlpha;如果使用原始图像作为阴影,值可以设置为SourceGraphic。

image.png

    2、<feBlend>标签

        定义阴影图像后,还需要在偏移的图像上混合原始图像,要应用标签,给它定义in属性,值为SourceGraphic。

image.png

四、实现阴影效果

    1、绘制一个矩形

<svg width="110" height="110" style="background: #eee">
  <rect width="90" height="90" stroke="green" stroke-width="3" fill="yellow"/>
</svg>

image.png

    2、添加阴影效果

        通过和标签组合,实现阴影效果。

<svg width="140" height="140" style="background: #eee">
  <defs>
    <filter x="0" y="0" width="200" height="200" id="f2">
      <feOffset in="SourceAlpha" dx="20" dy="20"/>
      <feBlend in="SourceGraphic"/>
    </filter>
  </defs>
  <rect width="90" height="90" stroke="green" stroke-width="3" fill="yellow" filter="url(#f2)"/>
</svg>

image.png

    3、添加模糊效果

        这里可以再结合标签,添加模糊效果。

<svg width="140" height="140" style="background: #eee">
  <defs>
    <filter x="0" y="0" width="200" height="200" id="f2">
      <feOffset in="SourceAlpha" dx="20" dy="20"/>
      <feGaussianBlur stdDeviation="10"/> <feBlend in="SourceGraphic"/>
    </filter>
  </defs>
  <rect width="90" height="90" stroke="green" stroke-width="3" fill="yellow" filter="url(#f2)"/>
</svg>

image.png

    4、代码演示

五、代码链接

gitee.com/huang_jing_…