svg学习记录(十一)

在某些情况下,一些基本的svg图形并不能实现诸如阴影、模糊等效果。而滤镜(filter)就是用来解决创建复杂效果的难题的。

filter

SVG过滤器在应用过滤效果的时候需要一个输入源,这个输入源可以是一个图形或者一个图形的alpha通道,或另一个过滤器的输入值。

SVG过滤器可以从输入源中产生一个输出图像。一个过滤器的输出可以是另一个过滤器的输入,这样,过滤器可以被链接起来使用。

滤镜与之前定义渐变效果类似,它需要在def标签中定义,然后再通过它的ID值引用到图形元素中。

模糊效果

我们看一个简单的例子:

<svg width="200" height="200">
    <defs>
        <filter id="blurFilter">
            <feGaussianBlur in="SourceGraphic" stdDeviation="4"/>
        </filter>
    </defs>
    <rect filter="url(#blurFilter)" x="10" y="10" width="50" height="50" fill="red"></rect>
</svg>

在这里插入图片描述
上面例子中,我们使用了feGaussianBlur 滤镜,也就是模糊滤镜。在该滤镜中我们给定了两个属性分别是instdDeviationin属性代表给定过滤器原语的输入,stdDeviation 属性设定了模糊的程度。

多个滤镜搭配工作

SVG中的滤镜还支持多个滤镜混合使用,你可能见过一个filter标签内里有大量代码,这对新手来说可能就很懵了

接下来,我们看看一个简单的多滤镜使用的例子:

<svg width="200" height="200">
    <defs>
        <filter id="blurFilter">
            <feGaussianBlur in="SourceGraphic" stdDeviation="8" result="blur" />
            <feOffset in="blur" dx="10" dy="12" result="offsetBlur" />
            <feMerge>
                <feMergeNode in="offsetBlur" />
                <feMergeNode in="SourceGraphic" />
            </feMerge>
        </filter>
    </defs>
    <image xlink:href="./img/1.jpg" x="10" y="0" height="50px" width="50px" filter="url(#blurFilter)"
</svg>

在这里插入图片描述
在这个例子中,我们使用了两种路径,分别是feGaussianBlurfeOffset,分别带有模糊和阴影效果。在feGaussianBlur多了一个result属性,这个是SVG的一个特征,不同滤镜作用的效果可以通过 result产出一个中间结果(primitives),其他滤镜可以使用in导入不同滤镜中导出的result。之后,使用feOffset滤镜用于创建阴影效果,我们使用in拿到上面result导出的内容,再做出位移操作。

feMerge滤镜登场,用于将同时应用滤镜效果(不是按顺序显示效果),它里边需要写入feMergeNode 标签,使用in属性将不同滤镜导出的效果进行输入。

关于滤镜通用属性

属性说明
x、y设置滤镜坐标系(默认值0)
width、height滤镜容器大小(默认值100%)
result导出滤镜效果,便于其他滤镜使用
in指定滤镜的输入源
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值