通过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模块的目前的状况分析
Feb 24 HTML / CSS
使用CSS3美化HTML表单的技巧演示
May 17 HTML / CSS
CSS3中的@keyframes关键帧动画的选择器绑定
Jun 13 HTML / CSS
css3实现wifi信号逐渐增强效果实例
Aug 09 HTML / CSS
css3动画 小球滚动 js控制动画暂停
Nov 29 HTML / CSS
HTML5 FormData 方法介绍以及实现文件上传示例
Sep 12 HTML / CSS
使用html2canvas将页面转成图并使用用canvas2image下载
Apr 04 HTML / CSS
CSS3 画基本图形,圆形、椭圆形、三角形等
Sep 20 HTML / CSS
使用phonegap查找联系人的实现方法
Mar 31 HTML / CSS
浅析图片上传及canvas压缩的流程
Jun 10 HTML / CSS
几款流行的HTML5 UI框架比较(小结)
Apr 08 HTML / CSS
如何用H5实现好玩的2048小游戏
Jul 23 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中使用sockets:从新闻组中获取文章
2006/10/09 PHP
如何跨站抓取别的站点的页面的补充
2006/10/09 PHP
全新Mac配置PHP开发环境教程
2016/02/03 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
2021/03/09 PHP
JavaScript入门教程(7) History历史对象
2009/01/31 Javascript
uploadify 3.0 详细使用说明
2012/06/18 Javascript
JavaScript按值删除数组元素的方法
2015/04/24 Javascript
jQuery.extend 函数及用法详细
2015/09/06 Javascript
Bootstrap实现水平排列的表单
2016/07/04 Javascript
AngularJS入门教程之ng-checked 指令详解
2016/08/01 Javascript
移动端效果之Swiper详解
2017/10/09 Javascript
vue router自动判断左右翻页转场动画效果
2017/10/10 Javascript
vue2.0 实现导航守卫(路由守卫)
2018/05/21 Javascript
JS实现的汉字与Unicode码相互转化功能分析
2018/05/25 Javascript
JS计算两个数组的交集、差集、并集、补集(多种实现方式)
2019/05/21 Javascript
JavaScript设计模式--简单工厂模式定义与应用案例详解
2020/05/23 Javascript
jquery实现点击左右按钮切换图片
2021/01/27 jQuery
Django中使用group_by的方法
2015/05/26 Python
一波神奇的Python语句、函数与方法的使用技巧总结
2015/12/08 Python
python3实现名片管理系统
2020/11/29 Python
不到20行代码用Python做一个智能聊天机器人
2019/04/19 Python
HTML5 3D书本翻页动画的实现示例
2019/08/28 HTML / CSS
Nordgreen美国官网:在线购买极简主义斯堪的纳维亚手表
2019/07/24 全球购物
测试工程师岗位职责
2013/11/28 职场文书
信用社员工先进事迹材料
2014/02/04 职场文书
学校出纳员岗位职责
2014/03/18 职场文书
升旗仪式演讲稿
2014/05/08 职场文书
大学生应聘导游自荐信
2014/06/02 职场文书
医生爱岗敬业演讲稿
2014/08/26 职场文书
研究生毕业论文导师评语
2014/12/31 职场文书
企业财务总监岗位职责
2015/04/03 职场文书
四群教育工作总结
2015/08/10 职场文书
Mysql服务添加 iptables防火墙策略的方案
2021/04/29 MySQL
【海涛解说】暗牧也疯狂,牛蛙成配角
2022/04/01 DOTA
TV动画《政宗君的复仇》第二季制作决定PV公布
2022/04/02 日漫
《王者天下》第4季首话新剧照 4月9日正式开播
2022/04/07 日漫