我将尝试用一个例子解释我的问题:
鉴于: rgb(100,0,0)+ x = rgb(100,0,100)
查找: x = rgba(0,0,100,0.5)
我的实际案例:
背景:rgb(147,150,72),元素rgb(44,100,62)
这个问题部分解决了白色背景的唯一案例,我实际上正在寻找更通用的解决方案。我试图调整javascript代码,但我真的不明白它是如何完成的,或者甚至是否可以使用通用解决方案。我可能能够自己编码是有人了解它的工作原理并告诉我。 (如果解决了,我当然会在这里发布解决方案)
链接:
答案 0 :(得分:2)
一般的确切解决方案不存在。
如您在
中所述的答案所述C = X * a + Y * (a-1)
是用于计算颜色C
和X
中颜色通道Y
的公式,而a
是X
的alpha值。< / p>
所以,当你试图找出颜色+ alpha通道时,你必须解决这个等式3次(每种颜色一次)。这些等式中的每一个都有2个未知数。
因此,无需应用其他条件(例如第二个链接中提到的条件),就会有无数种不同的解决方案(或者在每个颜色通道一个字节的特定情况下,最多256个)。
虽然确定一个确切的解决方案是不可能的,但您当然可以通过以下方式确定一个或多个可能的解决方案:
X = C/a - Y + Y/a // Formula from above solved for X
所以可能的解决方案是
r3 = r2/a - r1 + r1/a
g3 = g2/a - g1 + g1/a
b3 = b2/a - b1 + b1/a
与
rgb(r1, g1, b1)
是背景色,rgb(r2, g2, b2)
是混合色rgba(r3, g3, b3, a)
是在背景上绘制的颜色。 如果您现在选择a
,那么r3
,g3
和b3
都不会低于0或高于255,那么您将获得有效的解决方案。