减去颜色

时间:2015-03-01 15:53:10

标签: javascript css web colors

我将尝试用一个例子解释我的问题:

  1. 我们说我们的背景颜色为红色(很容易找到 - 颜色选择器)
  2. 前面有一个半透明元素。它是蓝色的,但看起来是紫色的。
  3. 再次产生的紫色阴影很容易找到,但有没有找到/计算半透明蓝色阴影?
  4. 鉴于: rgb(100,0,0)+ x = rgb(100,0,100)

    查找: x = rgba(0,0,100,0.5)


    我的实际案例:

    背景:rgb(147,150,72),元素rgb(44,100,62)

    background foreground


    这个问题部分解决了白色背景的唯一案例,我实际上正在寻找更通用的解决方案。我试图调整javascript代码,但我真的不明白它是如何完成的,或者甚至是否可以使用通用解决方案。我可能能够自己编码是有人了解它的工作原理并告诉我。 (如果解决了,我当然会在这里发布解决方案)

    链接:

1 个答案:

答案 0 :(得分:2)

一般的确切解决方案不存在。

如您在

中所述的答案所述
C = X * a + Y * (a-1)

是用于计算颜色CX中颜色通道Y的公式,而aX的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,那么r3g3b3都不会低于0或高于255,那么您将获得有效的解决方案。