计算RGBA以匹配RGB颜色
如果我有RGB颜色,100%不透明。
我想要一个透明的alpha通道相同的颜色(或接近它)。 我将在白色背景上绘制透明颜色。
我如何计算RGBA颜色?
我想我所问的是这个问题的反面。
你的意思是你想RGBA颜色与最大的透明度,当在白色背景上绘制,给出原始的RGB颜色?
令R0,G0和B0为原始颜色的分量,每个范围从0.0到1.0,并且让R,G,B和A是新的RGBA颜色的分量(其中A = 1表示100%不透明度)。 我们知道颜色必须满足:
R0 = A·R +(1-A)
G0 = A·G +(1-A)
B0 = A·B +(1-A)
如果我们知道A,我们可以很容易地解决R,G和B:
R =(R0-1 + A)/ A = 1-(1-R0)/ A
G =(G0-1 + A)/ A = 1-(1-G0)/ A
B =(B0-1 + A)/ A = 1-(1-B0)/ A
由于我们要求R≥0,G≥0且B≥0,因此1-R0≥A,1-G0≥A和1-B0≥A,因此A的最小可能值为:
A = max(1-R0,1-G0,1-B0)= 1 - min(R0,G0,B0)
因此,我们想要的颜色是:
A = 1 - min(R0,G0,B0)
R = 1-(1-R0)/ A
G = 1-(1-G0)/ A
B = 1-(1-B0)/ A
PS。 对于黑色背景,相同的公式会更简单:
A = max(R0,G0,B0)
R = R0 / A
G = G0 / A
B = B0 / A
PPS。 为了澄清,上面的所有公式都是针对非预乘RGBA颜色的。 对于预乘alpha,只需乘以上面计算得出的R,G和B,给出:
R = A·(1-(1-R0)/ A)= R0-(1-A)
G = A·(1-(1-G0)/ A)= G0-(1-A)
B = A·(1-(1-B0)/ A)= B0-(1-A)
(或者对于黑色背景,简单地R = R0,G = G0和B = B0)。
链接地址: http://www.djcxy.com/p/87071.html上一篇: computing RGBA to match an RGB color
下一篇: CSS opacity only to background color not the text on it?