在应用半透明覆盖层之后,以编程方式计算实现特定颜色所需的基色

时间:2017-07-24 12:32:00

标签: javascript colors alphablending

我正在尝试创建一个工具来帮助我为Web应用程序选择颜色。基本上,我希望能够指定最终颜色和一些叠加参数,并确定底层颜色需要什么(或者是否可以使用指定参数实现)。

所有叠加层都是半透明的黑色。

系统如何运作的一个例子:

  1. 我输入以下变量:
    • finalColourRed:128 [0-255]
    • finalColourGreen:118 [0-255]
    • finalColourBlue:107 [0-255]
    • overlayOpacity:0.21 [0-1]
  2. 系统返回:
    • rgb(183,169,154)
  3. 我应该注意到,我不需要帮助编写实际的代码,我只是不知道要使用的数学公式,而我的Google-fu今天很弱。我能找到的最接近的答案是这个优秀的答案(https://stackoverflow.com/a/12228643/4027341),但它缺少一个迭代,因为他知道最终所需的颜色,知道叠加颜色,知道叠加不透明度"

1 个答案:

答案 0 :(得分:3)

你可以一次做一个频道;公式就是这样:

频道的最终颜色将计算为:

finalColor = originalColor * (1.0 - opacity) + overlayColor * opacity;

在您的情况下,您知道最终颜色,叠加颜色和不透明度;做一些代数,我们得出结论:

originalColor = (finalColor - overlayColor * opacity) / (1.0 - opacity);

请注意不透明度= 1.0的边缘情况;在这种情况下,你根本无法计算原始颜色;更具体地说,如果opacity = 1.0,任何颜色都可以完成这项工作。

此外,公式可能最终产生负值或大于255的值;这些值意味着您无法获得能够提供所需结果的颜色。