没有合适的资源?快使用搜索试试~ 我知道了~
昨天各大平台收到通知,需要首页以黑白效果来展示,高级浏览器有一个简单的属性,全局设置一下,就可以满足: -webkit-filter: grayscale(100%);filter: grayscale(100%); 在低级浏览器可以借助第三方插件来实现,比如说grayscale.js这种。 这种插件的原理,简单来说就是递归DOM结构,判断节点的类型,如果是文本直接更改其颜色值,如果是图片,通过canvas来更改颜色值。 如何改变图片的颜色呢,就是今天咱们来聊的色彩矩阵。 其实就是把每个像素值跟多维矩阵乘一下就得到一个新的像素值(rgba)(底部有封装好的初始矩阵通道) matrix!:A
资源推荐
资源详情
资源评论
清明节黑白效果清明节黑白效果=>来聊聊色彩矩阵算法来聊聊色彩矩阵算法
昨天各大平台收到通知,需要首页以黑白效果来展示,高级浏览器有一个简单的属性,全局设置一下,就可以满足:
-webkit-filter: grayscale(100%);filter: grayscale(100%);
在低级浏览器可以借助第三方插件来实现,比如说grayscale.js这种。
这种插件的原理,简单来说就是递归DOM结构,判断节点的类型,如果是文本直接更改其颜色值,如果是图片,通过canvas
来更改颜色值。
如何改变图片的颜色呢,就是今天咱们来聊的色彩矩阵。
其实就是把每个像素值跟多维矩阵乘一下就得到一个新的像素值(rgba)(底部有封装好的初始矩阵通道)
matrix!:Array = [];
RGBA = [ R, G, B, A ]
matrix =[ 1, 0, 0, 0, 0,
0, 1, 0, 0, 0,
0, 0, 1, 0, 0,
0, 0, 0, 1, 0 ] //原始通道
新的颜色信息 = RGBA * matrix = [
matrix[0]*R + matrix[1]*G + matrix[2]*B + matrix[3]*A + matrix[4] // R通道
matrix[5]*R + matrix[6]*G + matrix[7]*B + matrix[8]*A + matrix[9] // G通道
matrix[10]*R + matrix[11]*G + matrix[12]*B + matrix[13]*A + matrix[14] // B通道
matrix[15]*R + matrix[16]*G + matrix[17]*B + matrix[18]*A + matrix[19] // A通道
]
matrix由 20 个项目组成的数组,适用于 4 x 5 颜色转换。
red通道的值:(1,0,0,0,0)表示,R通道的乘数是1(完全保留),别的道道的的乘数是0,(不加入别的通道的颜
色),色彩偏移量off是0;
green通道的值:(0, 1, 0, 0, 0)表示,G通道的乘数是1(完全保留),别的道道的的乘数是0,(不加入别的通道的颜
色),色彩偏移量off是0;
blue通道的值:(0, 0, 1, 0, 0)表示,B通道的乘数是1(完全保留),别的道道的的乘数是0,(不加入别的通道的颜
色),色彩偏移量off是0;
alpha通道的值:(0, 0, 0, 1, 0)表示,A通道的乘数是1(完全保留),别的道道的的乘数是0,(不加入别的通道的颜
色),色彩偏移量off是0;
4 x 5 4行5列我们已经知晓其4列(RGBA),至于第5列(简称N)是颜色亮度的调节:
1,0,0,0,N
0,1,0,0,N
0,0,1,0,N
0,0,0,1,0
N=>亮度取值范围-255到255,只需要设置一下RGB的色彩偏移就能调节其亮度
举例说明:如果想要一个值为 rgba(200, 100, 50, 1 ) 的颜色,只保留红色通道的色彩。我们只需要调整 matrix 并做如下运算:
[ 200, 100, 50, 1 ] * [ 1, 0, 0, 0, 0,
0, 0, 0, 0, 0,
0, 0, 0, 0, 0,
0, 0, 0, 1, 0 ] = [
1*200 + 0*100 + 0*50 + 0*1 + 0,
0*200 + 0*100 + 0*50 + 0*1 +0,
0*200 + 0*100 + 0*50 + 0*1 +0,
0*200 + 0*100 + 0*50 + 1*1 +0,
] = [ 200, 0, 0, 1 ]
颜色反转
[ 200, 100, 50, 1 ] * [ -1, 0, 0, 0, 255,
0, -1, 0, 0, 255,
0, 0, -1, 0, 255,
0, 0, 0, 1, 0 ] = [
-1*200 + 0*100 + 0*50 + 0*1 + 255,
0*200 + -1*100 + 0*50 + 0*1 +255
0*200 + 0*100 + -1*50 + 0*1 +255,
0*200 + 0*100 + 0*50 + 1*1 +0,
] = [ 206, 206, 206, 1]
咱们昨天的黑白是如何实现的呢,颜色去色,同样是矩阵算法,但是通道值却不是跟上面一样的1:
matrix = [ 0.3086, 0.6094, 0.0820, 0, 0
0.3086, 0.6094, 0.0820, 0, 0
0.3086, 0.6094, 0.0820, 0, 0
0 , 0 , 0, 1, 0 ]
只要把RGB三通道的色彩信息设置成一样;即:R=G=B,那么图像就变成了灰色,并且,为了保证图像亮度不变,同一个
通道中的R+G+B=1,很多人会奇怪为啥是这三个小数,其实是把RGB做了一个比例均分:大概是3:6:1,即:0.3086, 0.6094,
0.0820
看到这里来了,应该就会明白更改图片颜色的关键是矩阵乘法,通过不同的多维矩阵原始值,来达到不同的效果,包括咱们看
到的微信图片滤镜,以及社交平台ins的图片滤镜,也是通过多维矩阵算法来实现一个图片滤镜。
下面看看,我们可以利用这个玩意最终来做成什么效果(家中浩克出来当次模特吧):
剩余6页未读,继续阅读
资源评论
weixin_38554186
- 粉丝: 0
- 资源: 955
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功