以编程方式计算应用半透明叠加后实现特定颜色所需的基色

Sco*_*ots 3 javascript alphablending colors

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

所有覆盖层都将是半透明的黑色。

该系统如何工作的示例:

  1. 我输入以下变量:
    • 最终颜色红色:128 [0-255]
    • 最终颜色绿色:118 [0-255]
    • 最终颜色蓝色:107 [0-255]
    • 覆盖不透明度:0.21 [0-1]
  2. 系统返回:
    • RGB(183, 169, 154)

我应该指出,我不需要帮助来编写实际代码,我只是不知道要使用的数学公式,而且我今天的 Google 能力很弱。我能找到的最接近的是这个优秀的答案(/sf/answers/856005041/),但它缺少“了解最终所需颜色、了解叠加颜色、了解叠加不透明度”的迭代

Har*_*_OK 6

您可以一次执行一个通道;该公式的工作原理如下:

通道的最终颜色计算如下:

finalColor = originalColor * (1.0 - opacity) + overlayColor * opacity;
Run Code Online (Sandbox Code Playgroud)

就您而言,您知道最终颜色、叠加颜色和不透明度;进行一些代数计算,我们得出以下结论:

originalColor = (finalColor - overlayColor * opacity) / (1.0 - opacity);
Run Code Online (Sandbox Code Playgroud)

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

此外,该公式最终可能会产生负值或大于 255 的值;这些值意味着您无法完全获得能够给出您想要的结果的颜色。