css 颜色的减法-需要获得颜色的透明值

fzsnzjdm  于 2023-01-27  发布在  其他
关注(0)|答案(1)|浏览(174)

我只是想得到一个rgb-colour的rgba值(#ebfcff)。rgb-colour是在白色背景上的rgba值。(a代表alpha)
因此:搜索颜色+ #ffffff = #ebfcff
在我看来,解决办法是从#ebfcff中减去白色,但如何减去颜色呢?
我已经找到了一个合适的解决方案。有人知道如何从一个给定的RGB颜色中减去白色来得到一个新的颜色吗?这个新的颜色是rgba格式的,当它与白色重叠时,它等于给定的颜色。

disho6za

disho6za1#

颜色值不只是相加。
当您在颜色Y上绘制颜色X时,结果颜色C的每个颜色通道的值由下式给出:

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

使用浮点表示(每个通道是从0到1的值);其中aX的alpha通道(很容易转换回0-255)。
在白色背景上,所有通道的Y均为1,因此:

C = X * a + (1-a)

因此,如果a为0,显然找不到X,这是有道理的:如果颜色是完全透明的,则对合成颜色没有影响。
同样,如果颜色是白色(X =1)(在白色背景上),则无法确定alpha(无论alpha如何,组合颜色都将是白色)。
此外,如果不知道Xa,则无法找到另一个。
如果你知道颜色的阿尔法(a),那么您就可以确定(X)是,但如果你的组合色(C)是一个离散值(例如从0到255的整数),然后将其四舍五入,所以你只能得到绘制颜色的近似值(X)。它的准确程度取决于alpha(绘制的颜色越透明,你确定颜色的准确度就越低)。
因此,求解X(其中背景(Y)为白色):

X * a = C + a - 1
Therefore:  X = (C + a - 1 ) / a

对于8位颜色通道(24位颜色):

X = 255 * ( C/255 + a/255 - 1 ) / (a/255)

(给定一个6位十六进制值,对每一对数字C应用此公式)。
您可以优化它以避免浮点计算。
我不知道那有没有用,但你只能这样了。

相关问题