透明图片的混合模式 2021-06-16

https://www.cnblogs.com/mkr67n/p/14784933.html

https://zh.wikipedia.org/wiki/Alpha%E5%90%88%E6%88%90

图片正常模式混合(透明度混合)公式

一、描述

所有内容摘自维基

在处理图象时可能需要手撸图片混合的代码,此时混合公式就十分重要。而正常混合(Normal Blending)模式是最常用的一种格式(比如PS的默认图层混合模式)。想手动实现时却发现搜“正常混合”搜不出结果,因此写一篇文章增加后来人的搜索命中率。

“正常混合”是什么?

顾名思义,就是上层图片覆盖下层图片。从感官上,上层的颜色不应该被下层影响。

比如A覆盖B:

当两张图片完全不透明时A的像素取代B的像素。

而A、B非不透明时,透明度则在此次混合中起关键作用。

因此“正常混合”其实实质是“透明度混合(Alpha Blending)

二、公式

1.一般公式

透明度混合公式由Thomas Porter和Tom Duff定义

设A覆盖B

C表示Color(不包括不透明度通道)

α表示不透明度通道

下标A,B,O分别表示上层图像、下层图像、覆盖后图像

则对透明度有:

\alpha_{o}=\alpha_{a}+\alpha_{b}(1-\alpha_{a})

或者写成更常见的另一种形式:

\alpha_{o} =1-(1-\alpha_{a})*(1-\alpha_{b})

对颜色通道有:

C_{o}=\frac{C_{a}\alpha_{a}+C_{b}\alpha_{b}(1-\alpha_{a}) }{\alpha_{o}}

2. 下层完全不透明情形

网上更多的是这种情况,虽然形式更简单了,但事实上这个只在下层为完全不透明时适用

 \alpha_{b}为1,则有:

\alpha_{o}=1

C_{o}=C_{a}\alpha_{a}+C_{b}(1-\alpha_{a})

3.当颜色为“预乘透明度”的情形

当颜色为预乘透明度(premultiplied alpha)时,它的颜色通道预乘了α通道的值。

具体含义不在此展开,只给出此情形的透明度混合公式:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容