计算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?