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

Programatically calculate base colour required to achieve a specific colour after applying a translucent overlay

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

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

系统工作原理示例:

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

我应该注意,我不需要帮助来为此编写实际代码,我只是不知道要使用的数学公式而且我的 Google-fu 今天很弱。我能找到的最接近的是这个很好的答案 () 但它缺少 "knowing final desired colour, knowing overlay colour, knowing overlay opacity"

的迭代

一次一个频道即可;公式是这样的:

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

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

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

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

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

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