这篇文章发布于 2019年05月28日,星期二,00:04,归类于 CSS相关。 阅读 34807 次, 今日 20 次 12 条评论
by zhangxinxu from https://www.zhangxinxu.com/wordpress/?p=8661
本文欢迎分享与聚合,全文转载就不必了,尊重版权,圈子就这么大,若急用可以联系授权。
一、滤色screen混合模式速览
screen
混合模式,国内称为“滤色”,其计算公式是:
公式中的C表示最终混合的RGB色值(范围是0-255),A和B表示用来混合的两个颜色的RGB色值(范围也是0-255)。
从公式的内容可以看出,滤色混合模式的颜色,是将两个颜色的互补色的像素值相乘,然后除以255的互补色值。
例如有一个红色,其RGB值是(255,0,0)
,还有一个蓝色,其RGB值是(0,0,255)
,则这两个颜色使用滤色混合模式之后的颜色色值是:
- R = 255 – (255 – 255) * (255 – 0) / 255 = 255
- G = 255 – (255 – 0) * (255 – 0) / 255 = 0
- B = 255 – (255 – 0) * (255 – 255) / 255 = 255
于是最终的色值是 RGB(255,0,255) ,也就是下面这个色块的颜色如果没有色块显示,请访问原文地址https://www.zhangxinxu.com/wordpress/?p=8661:
然后下面这个是应用mix-blend-mode:screen
代码的实时混合色值效果:
可以看到,两个色块呈现的颜色是一模一样的,既验证了公式的正确性,也对滤色模式有了第一次的认识。
二、滤色模式的特性与web应用
以下是一些直观的特性:
- 任何颜色和黑色执行滤色,还是呈现原来的颜色;
- 任何颜色和白色执行滤色得到的是白色;
- 任何颜色和其他颜色执行滤色模式混合后的颜色会更浅,有点类似漂白的效果。
滤色模式模式对于在图像中创建霓虹辉光效果是非常有用的,这一特性对于Web开发也同样受用。
我们经常需要对一些图像素材添加一些场景特效,比如说各种天气,或者霓虹辉光效果等。
传统做法是使用一张透明的PNG图像覆盖在上面,但是使用PNG透明前景图有下面2个缺点:
- 效果不自然,缺少那种跟底图完全融为一体的感觉;
- 图片的尺寸实在是太大了,动不动就上百K;
现在,有了滤色模式模式,我们只要准备一张黑色底色的jpg图片就可以了,应用screen混合模式,不仅可以跟底图完全融为一体,且使用的前景图片的文件尺寸只有PNG图片的1/10。
例如我们有下面一张底图,森林和小鹿:
然后,有以下一些特效前景图:
分别和提供的底图进行混合,可以看到如下图所示的实时效果:
可以看到效果很棒很自然。而这里使用的前景素材尺寸300*400,尺寸仅20K左右,开销非常小。
还能应用于HTML video视频
滤色混合模式不仅可以作用于图像,还可以用于视频,同样的,只要我们把视频的底色做成黑色,就能很好得和网页背景融为一体。
例如这里有个网页截图,还有一个二次元风格的场景图:
然后还有两个黑色背景的视频特效素材,分别是礼花绽放和瓢泼大雨(视频不动请点击):
通过设置video元素混合模式为screen,可以得到下面所示的精彩效果(视频不动请点击):
为网页动效的实现增加了新的思路。
三、滤色混合模式的兼容性
滤色混合模式的兼容性还是很溜的,2014年底就开始支持,目前已经快5年了,按照手机的更新速度,只要你的产品不是国民级的,移动端是可以放心使用的。
由于Edge拥抱Chrome浏览器,因此,Edge75也是支持了,可以预见,10年后,等window7系统没有人使用的时候,PC端也可以绽放光彩了。
无论在哪个语言中,无论是什么设计工具,滤色混合模式都是非常基础,非常常见的一种混合模式,如果你致力于在图形表现领域有所作为,一定要把这种模式的混合算法、特效以及应用场景记得滚瓜烂熟。
好了,本文内容就这些,感谢阅读!
本文为原创文章,欢迎分享,勿全文转载,如果内容你实在喜欢,可以加入收藏夹,永不过期,而且还会及时更新知识点以及修正错误,阅读体验也更好。
本文地址:https://www.zhangxinxu.com/wordpress/?p=8661
(本篇完)
- 如何让MP4 video视频背景色变成透明? (0.991)
- 深入理解CSS background-blend-mode的作用机制 (0.747)
- FDCon2019大会分享之滤镜与混合模式实录 (0.301)
- HTML中无标签文本的CSS变色技巧 (0.278)
- CSS混合模式mix-blend-mode/background-blend-mode简介 (0.269)
- CSS, SVG和canvas分别实现文本文字纹理叠加效果 (0.269)
- 我是如何通过CSS向JS传参的 (0.219)
- 今天才知道,Web网页也能阻止息屏了 (0.219)
- 小tips:使用canvas在前端实现图片水印合成 (0.187)
- SVG滤镜系列之搞懂<feBlend>元素 (0.187)
- 秋月何时了,CSS3 border-radius知多少? (RANDOM - 0.009)
rgb 不是有三个值吗? c 取的哪一个?a b 又是怎么取的? a b 代表的是这个点叠加了什么颜色吗?
有没有demo代码。这是两个元素发生重叠时,上层设置mix-blend-mode:screen属性,发生的效果嘛。
想问一下老师有类似的代码学习一下嘛
打开控制台看一下css就知道了
CSS Ps化?
可想给你点个赞,但是没得点赞按钮
张老师,为什么即使给video标签加了autoplay属性,有时候还是会出现视频不自动播放的情况呢
给video标签设置mute
浏览器特性 禁止干扰用户 除非用户手动触发了什么
太神奇了,居然还有这种玩法,神奇的css世界
赞,以前用canvas做烟花特效效果很卡还不好看,还有展示区域的限制,现在这个好棒
深度好文!拉出 PhotoShop 一阵操作,不但学会了 mix-blend-mode,还加深了对 PS 图层混合模式的理解