通过feDisplacementMap和feImage实现水波特效


Posted in HTML / CSS onApril 24, 2022

1.feDisplacementMap

feDisplacementMap 实际上是一个位置替换滤镜,就是改变元素和图形的像素位置的。遍历原图形的所有像素点,使用feDisplacementMap重新映射替换一个新的位置,形成一个新的图形。feDisplacementMap滤镜在业界的主流应用是对图形进行形变,扭曲,液化。

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.5YC(x,y) - 0.5范围也是-0.5~0.5
· scale表示计算后的偏移值相乘的比例,scale越大,则偏移越大。

再用一句话解释就是,根据设定的通道颜色对原图的x, y坐标进行偏移。

默认值 取值 说明
xChannelSelector A A or R or G or B 对应XC(x,y),表示X轴坐标使用的是哪个颜色通道进行位置偏移
yChannelSelector A A or R or G or B 对应YC(x,y),表示Y轴坐标使用的是哪个颜色通道进行位置偏移
color-interpolation-filters linearRGB linearRGB or sRGB 滤镜对颜色进行计算时候采用的颜色模式类型
scale 0 可正可负 缩放比例 通常使用正数值处理,值越大,偏移越大。
in SourceGraphic SourceGraphic,SourceAlpha,BackgroundImage, BackgroundAlpha,FillPaint,StrokePaint,以及自定义的滤镜的原始引用 原始图形
in2 元素的result属性值 同in 用来映射的图形

2.通过feDisplacementMap和feImage实现水波特效

实现水波效果通常使用下图

通过feDisplacementMap和feImage实现水波特效

<svg id='svg' width="400" height="400" xmlns="http://www.w3.org/2000/svg">
    <defs>
        <filter id="filter-ripple" primitiveUnits='objectBoundingBox'>
            <feImage id='feImage' result="pict2" xlink:href="上述图片地址"  x="0" y="0" width="100%" height="100%"></feImage>
            <feDisplacementMap id='displacement-map' result='ok' scale="0" xChannelSelector="R" yChannelSelector="G" in2="pict2" in="SourceGraphic" color-interpolation-filters="sRGB"></feDisplacementMap>
            <feComposite operator="in" in2="pict2"></feComposite>
            <feComposite in2="SourceGraphic"></feComposite> //这个的目的是因为添加滤镜的元素可见区域和feImage元素的大小一致。融合原有元素保证整个元素都可见
        </filter>
    </defs>
</svg>

水波特效,是通过<feImage>标签 x,y,width,height四个属性和<feDisplacementMap>标签scale动态变化实现。
就像涟漪,以石子掉落处为中心,范围由小扩大,起伏由强减弱。 转为代码,也就是width,height由小变大,scale由大变小
根据点击事件,可以计算出中心坐标(pointX,pointY)

通过feDisplacementMap和feImage实现水波特效

在扩散过程中,中心坐标不变,x,y为图片的起始坐标
pointX = width/2 + x ;pointY = height/2 + y => x = pointX - width/2; y = pointY - height/2
width,height,scale的最大值就可以根据需求来设置啦~

参考资料

https://www.zhangxinxu.com/wordpress/2017/12/understand-svg-fedisplacementmap-filter/

到此这篇关于使用feDisplacementMap+feImage滤镜实现水波纹效果(计算动态值)的文章就介绍到这了!


Tags in this post...

HTML / CSS 相关文章推荐
CSS3 开发工具收集
Apr 17 HTML / CSS
HTML5 placeholder属性详解
Jun 22 HTML / CSS
基于HTML5 Canvas 实现商场监控实例详解
Nov 20 HTML / CSS
让IE支持HTML5的方法
Dec 11 HTML / CSS
整理HTML5移动端开发的常用触摸事件
Apr 15 HTML / CSS
HTML5本地数据库基础操作详解
Apr 26 HTML / CSS
使用phonegap获取位置信息的实现方法
Mar 31 HTML / CSS
html5是什么_动力节点Java学院整理
Jul 07 HTML / CSS
HTML5地理定位_动力节点Java学院整理
Jul 12 HTML / CSS
html5写一个BUI折叠菜单插件的实现方法
Sep 11 HTML / CSS
HTML5去掉输入框type为number时的上下箭头的实现方法
Jan 03 HTML / CSS
AmazeUI 平滑滚动效果的示例代码
Aug 20 HTML / CSS
什么是css原子化,有什么用?
Apr 24 #HTML / CSS
css3 文字断裂效果
css3属性选择器 “~”(波浪号) “,”(逗号) “+”(加号)和 “>”(大于号)
Apr 19 #HTML / CSS
开发微信小程序之WXSS样式教程
Apr 18 #HTML / CSS
CSS中float高度塌陷问题的四种解决方案
Apr 18 #HTML / CSS
HTML5基础学习之文本标签控制
Mar 25 #HTML / CSS
CSS实现渐变色边框(Gradient borders)的5种方法
Mar 25 #HTML / CSS
You might like
PHP大小写问题:函数名和类名不区分,变量名区分
2013/06/17 PHP
Laravel 5框架学习之子视图和表单复用
2015/04/09 PHP
DWZ+ThinkPHP开发时遇到的问题分析
2016/12/12 PHP
鼠标图片振动代码
2006/07/06 Javascript
javascript Onunload与Onbeforeunload使用小结
2009/12/31 Javascript
Extjs显示从数据库取出时间转换JSON后的出现问题
2012/11/20 Javascript
js实现运动logo图片效果及运动元素对象sportBox使用方法
2012/12/25 Javascript
Javascript中3个需要注意的运算符
2015/04/02 Javascript
JavaScript中的this关键字使用详解
2015/08/14 Javascript
JavaScript事件类型中UI事件详解
2016/01/14 Javascript
详解vue-Resource(与后端数据交互)
2017/01/16 Javascript
JS调用安卓手机摄像头扫描二维码
2018/10/16 Javascript
ES6基础之解构赋值(destructuring assignment)
2019/02/21 Javascript
Vue的click事件防抖和节流处理详解
2019/11/13 Javascript
解决element-ui里的下拉多选框 el-select 时,默认值不可删除问题
2020/08/14 Javascript
[06:44]2018DOTA2亚洲邀请赛4.5 SOLO赛 MidOne vs Sumail
2018/04/06 DOTA
[06:43]2018DOTA2国际邀请赛寻真——VGJ.Thunder
2018/08/11 DOTA
跟老齐学Python之不要红头文件(1)
2014/09/28 Python
Python之日期与时间处理模块(date和datetime)
2017/02/16 Python
Python设计模式之代理模式简单示例
2018/01/09 Python
Python3编码问题 Unicode utf-8 bytes互转方法
2018/10/26 Python
pytorch 实现模型不同层设置不同的学习率方式
2020/01/06 Python
Python autoescape标签用法解析
2020/01/17 Python
基于Keras的格式化输出Loss实现方式
2020/06/17 Python
python 批量将中文名转换为拼音
2021/02/07 Python
浅析HTML5中的download属性使用
2019/03/13 HTML / CSS
Michael Kors英国官网:美国奢侈品品牌
2019/11/13 全球购物
C/C++ 笔试、面试题目大汇总
2015/11/21 面试题
洗煤厂厂长岗位职责
2014/01/03 职场文书
优秀员工获奖感言
2014/03/01 职场文书
机票销售员态度不好检讨书
2014/09/27 职场文书
2014年司机工作总结
2014/11/21 职场文书
聋哑人盗窃罪辩护词
2015/05/21 职场文书
六五普法心得体会2016
2016/01/21 职场文书
个人落户申请书怎么写?
2019/06/28 职场文书
解决使用了nginx获取IP地址都是127.0.0.1 的问题
2021/09/25 Servers