如何混合 2 个透明层?
How to blend 2 transparency layers?
例如,我们有 2 个透明层:第一个是 black (0, 0, 0, 0.75)
,第二个是 white (255, 255, 255, 0.64)
。我不知道如何混合它们。
但我知道如何混合一层不透明层和一层透明层。它看起来像这样:https://wikimedia.org/api/rest_v1/media/math/render/svg/1e35c32f13d5eedc7ac21e9e566796dd048a31e6
假设背景色为(C, 1)
(RGB,A),第一层为(A, s)
,第二层为(B, t)
。应用混合方程两次:
C' = t * B + (1-t) * [s * A + (1-s) * C]
= [t * B + (1-t) * s * A] + (1-t) * (1-s) * C
我们可以看到新的有效混合系数为1 - (1-s) * (1-t)
。要获得组合的透明度颜色,请将第一项除以:
r := 1 - (1-s) * (1-t)
D := [t * B + (1-t) * s * A] / r
--> C' = r * D + (1-r) * C
即新的有效透明层由 (D, r)
.
给出
在您的示例中,值将是 D = (179, 179, 179)
和 r = 0.91
。
例如,我们有 2 个透明层:第一个是 black (0, 0, 0, 0.75)
,第二个是 white (255, 255, 255, 0.64)
。我不知道如何混合它们。
但我知道如何混合一层不透明层和一层透明层。它看起来像这样:https://wikimedia.org/api/rest_v1/media/math/render/svg/1e35c32f13d5eedc7ac21e9e566796dd048a31e6
假设背景色为(C, 1)
(RGB,A),第一层为(A, s)
,第二层为(B, t)
。应用混合方程两次:
C' = t * B + (1-t) * [s * A + (1-s) * C]
= [t * B + (1-t) * s * A] + (1-t) * (1-s) * C
我们可以看到新的有效混合系数为1 - (1-s) * (1-t)
。要获得组合的透明度颜色,请将第一项除以:
r := 1 - (1-s) * (1-t)
D := [t * B + (1-t) * s * A] / r
--> C' = r * D + (1-r) * C
即新的有效透明层由 (D, r)
.
在您的示例中,值将是 D = (179, 179, 179)
和 r = 0.91
。