• 日常搜索
  • 百度一下
  • Google
  • 在线工具
  • 搜转载

SVG 过滤器简介

在本教程中,我们将探索 svg 滤镜的世界。使用 SVG 过滤器,您可以创建独特的文本效果、图像效果,并且使用一点 javascript 可以创建一些非常有趣的动态分形效果。

SVG 过滤器简介  第1张

在本教程中

以下是我们将介绍的内容:

  • 什么是 SVG 过滤器?

  • 过滤器元素和过滤器基元

  • 应用 SVG 滤镜效果(演示)

  • 浏览器支持

什么是 SVG 过滤器?

要了解什么是 SVG 过滤器,我们先来看看 css 过滤器。在 CSS 中,我们可以使用某些函数来添加模糊、阴影和颜色操作(例如更改色调、饱和度、亮度等)。

CSS 过滤器很棒,但它们非常有限。您实际上只能将它们广泛用于位图图像,而且您可以做的事情相当简单。如果您需要更高级的东西,则需要将注意力转向 SVG 过滤器。

注意:CSS 过滤器实际上是 SVG 过滤器的一个子集。信不信由你,SVG 过滤器从 2007 年就已经出现了!

CSS 过滤器更容易被听到,因为它们更容易实现。然而,使用 CSS 过滤器我们可以对图像应用模糊,使用 SVG 过滤器我们可以应用水平模糊,以及其他类型。

重要提示:SVG 过滤器可以应用于任何 html 元素。

过滤器元素和过滤器基元

为了创建 SVG 过滤器,我们使用filter()元素和我们称为过滤器原语的特殊功能。我们从一个开始并在<svg>其中定义一个过滤器(带有一个 ID):

<svg>

    <filter id="demofilter">

        ...

    </filter>

     

    <img xlink:href="" width="100" height="100" x="0" y="0" filter="url(demoFilter)"/>

</svg>

在过滤器中,我们添加了我们需要的精确过滤器原语(稍后会详细介绍),最后我们创建我们想要影响的元素,使用filter=""属性并引用我们创建的 ID。

原语

我们今天可以使用 17 个原语:

  • <feGaussianBlur>

  • <feDropShadow>

  • <feMorphology>

  • <feDisplacementMap>

  • <feBlend>

  • <feColorMatrix>

  • <feConvolveMatrix>

  • <feComponentTransfer>

  • <feSpecularLighting>

  • <feDiffuseLighting>

  • <feFlood>

  • <feTurbulence>

  • <feImage>

  • <feTile>

  • <feOffset>

  • <feComposite>

  • <feMerge>

注意所有它们的fe前缀。那代表过滤效果。这些基元允许我们创建简单的效果,如投影,以及 photoshop 级效果,如颜色混合、置换贴图等。

应用 SVG 滤镜效果 

从一个<svg>元素开始,给它一些尺寸(这些恰好与我将要使用的图像的尺寸相匹配)和一个视图框:

<svgwidth="1000"height="577"viewBox="0 0 1000 577">

</svg>

接下来是过滤器元素,带有一个 ID:

<svgwidth="1000"height="577"viewBox="0 0 1000 577">

<filterid="demoFilter">

</filter>

</svg>

现在我们需要添加一个可以应用过滤器的元素。 

<svg width="1000" height="577" viewBox="0 0 1000 577">

    <filter id="demoFilter">

     

    </filter>

     

    <image xlink:href="https://s3-us-west-2.amazonaws.  com/s.cdpn.io/17119/redcharlie-k2zWqv_yfNM-unsplash.jpg" width="100%" height="100%" x="0" y="0" filter="url(#demoFilter)"/>

</svg>

原语

然后在我们的内部<filter> 放置一些过滤器原语。我想先添加一个颜色过滤器,然后再应用一个混合模式过滤器。所以第一个使用feFlood原语:

<feFloodflood-color="#2da0fb"flood-opacity="1"result="FLOOD"/>

在这里,我们定义了颜色、不透明度和结果(我们将其定义为 FLOOD)。结果是什么?SVG 过滤器可以组合,因此我们可以使用我们在此处定义的 ID 作为另一个原语的条目。我们现在将添加我们的第二个原语:

<feBlendmode="color-burn"in="SourceGraphic"in2="FLOOD"result="BLEND"/>

这 feBlend允许我们定义一个混合模式,然后是两个输入。我们的输入是SourceGraphic(这是我们将全部应用到的元素)和FLOOD(这是我们定义的第一个原语。

注意:本示例中的大写字母不是强制性的,但我希望能够在工作时从视觉上区分这些值。

这是我们最终得到的结果(分叉并自己玩!):

See the Pen  Introduction to SVG Filters - Example #1 by Envato Tuts+ (@tutsplus)  on CodePen.

有关更多示例,请观看上面的视频。在其中,我们创建以下内容:

See the Pen  Introduction to SVG Filters - Example #2 by Envato Tuts+ (@tutsplus)  on CodePen.

结论

这里的所有都是它的!SVG 过滤器真的很强大,所以可以尽情玩耍。你会惊讶于你能创造什么。

在浏览器支持方面,您可能会惊讶地发现SVG 过滤器实际上比 CSS 过滤器得到更好的支持!但是请注意:虽然不同的浏览器可能支持 SVG 过滤器功能,但它们呈现最终结果的方式可能有所不同。

文章目录
  • 在本教程中
  • 什么是 SVG 过滤器?
  • 过滤器元素和过滤器基元
    • 原语
  • 应用 SVG 滤镜效果
    • 原语
  • 结论