在本教程中,我们将探索 svg 滤镜的世界。使用 SVG 过滤器,您可以创建独特的文本效果、图像效果,并且使用一点 javascript 可以创建一些非常有趣的动态分形效果。
在本教程中
以下是我们将介绍的内容:
什么是 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 过滤器功能,但它们呈现最终结果的方式可能有所不同。
- 原语
- 原语