【问题标题】:Subtract colors减去颜色
【发布时间】:2015-03-01 15:53:09
【问题描述】:

我会试着用一个例子来解释我的问题:

  1. 假设我们有一个红色的背景(很容易找到 - 颜色选择器)
  2. 前面有一个半透明元素。它是蓝色的,但看起来是紫色的。
  3. 同样,生成的紫色阴影很容易找到,但有没有办法找到/计算半透明的蓝色阴影?

给定: 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 代码,但我并不真正了解它是如何完成的,或者是否有可能提供通用解决方案。如果有人了解它的工作原理并告诉我,我也许可以自己编写代码。 (如果解决了,我当然会在这里发布解决方案)

链接:

【问题讨论】:

    标签: javascript css web colors


    【解决方案1】:

    一般的精确解不存在。

    如您链接到的答案所述

    C = X * a + Y * (a-1)
    

    是计算C颜色通道XY的公式,而aX的alpha值。

    因此,当您尝试找出颜色 + 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,您将得到一个有效的解决方案。

    【讨论】:

      猜你喜欢
      • 2012-02-18
      • 1970-01-01
      • 1970-01-01
      • 2017-03-26
      • 2011-09-19
      • 2019-03-13
      • 2013-09-21
      • 1970-01-01
      • 2015-05-01
      相关资源
      最近更新 更多