1 feflood
此过滤器创建一个矩形,其中填充了指定的的颜色,应用了不透明度值。
1.1 语法
<feFlood x="" y="" width="" height="" flood-color="" flood-opacity=""/>
1.2 属性
- x,y -定义用户坐标系x轴和y轴坐标
- width-宽度
- height-高度
- flood-color-颜色
- flood-opacity-不透明度
1.3 示例
<svg xmlns="http://www.w3.org/2000/svg" width="200" height="200">
<defs>
<filter id="floodFilter" filterUnits="userSpaceOnUse">
<feFlood x="100" y="100" width="100" height="100"
flood-color="orange" flood-opacity="0.8"/>
</filter>
</defs>
<use filter="url(#floodFilter)"/>
</svg>
2 # feDisplacementMap 位置替换滤镜
此过滤器改变元素和图形的像素位置,形成一个新的图形(比如添加水波纹效果)。
根据设定的通道颜色对原图的x, y坐标进行偏移
公式:P’(x,y) ← P( x + scale * (XC(x,y) - 0.5), y + scale * (YC(x,y) - 0.5))
- P’(x,y)指的是转换之后的x, y坐标
- x + scale * (XC(x,y) - 0.5), y + scale * (YC(x,y) - 0.5)指的是具体的转换规则。
- XC(x,y)表示当前x,y坐标像素点其X轴方向上设置的对应通道的计算值,范围是0~1。
- YC(x,y)表示当前x,y坐标像素点其Y轴方向上设置的对应通道的计算值,范围是0~1。
- -0.5是偏移值,因此XC(x,y) - 0.5范围是-0.5~0.5,YC(x,y) - 0.5范围也是-0.5~0.5。
- scale表示计算后的偏移值相乘的比例,scale越大,则偏移越大。
2.1 语法
<feDisplacementMap xChannelSelector="" yChannelSelector="" color-interpolation-filters="" in="" in2="" scale=""></feDisplacementMap>
2.2 属性
- xChannelSelector-对应XC(x,y),表示X轴坐标使用的是哪个颜色通道进行位置偏移(R、G、B、A中的一个,默认是A)
- yChannelSelector-对应YC(x,y),表示y轴坐标使用的是哪个颜色通道进行位置偏移
- color-interpolation-filters-表示滤镜对颜色进行计算时候采用的颜色模式类型。分为linearRGB(默认值)和sRGB
- in-表示输入的原始图形
- in2-表示用来映射的图形
- scale-缩放比例,可正可负,默认是0。通常使用正数值处理,值越大,偏移越大
2.3 示例
<svg width="200" height="200">
<filter id="displacementFilter">
<feTurbulence type="turbulence"
baseFrequency="1"
numOctaves="2"
result="turbulence" />
<feDisplacementMap in2="turbulence"
in="SourceGraphic" scale="50"
xChannelSelector="R"
yChannelSelector="B" />
</filter>
<circle cx="100" cy="100" r="100"
stroke="green"
filter="url(#displacementFilter)" />
</svg>