alpha 混合如何在 photoshop 中使用透明背景

How alpha blending works with a transparent background in photoshop

我有两个方块:不透明度为 (255, 0, 0) 50% 的红色,不透明度为 (0, 0, 255) 50% 的蓝色 和黑色不透明背景。 在这些颜色的交叉处,Photoshop 显示颜色 (128, 0, 64) ( photoshp screenshot ).

我同意这一点。蓝色首先与黑色背景融合:

(0, 0, 255) * 0.5 + (0, 0, 0) * ( 1 - 0.5) = (0, 0, 127.5) 阿尔法 = 0.5 + 1 * (1 - 0.5) = 1

然后结果是混红的:

(255, 0, 0) * 0.5 + (0, 0, 127.5) * (1 - 0.5) = (127.5, 0, 63.75) 阿尔法 = 0.5 + 1 * (1 - 0.5) = 1

但是如果背景是透明的,photoshop 会给出颜色 (170, 0, 85) 和 75% 的不透明度 ( photoshp screenshot ).

它是如何得到那种颜色的?我期望 (127.5, 0, 127.5) 具有 75% 的不透明度,因为背景中没有任何东西可以混合。

按照 this 文章中描述的数学方法,将不透明度为 50% 的蓝色方块通过 alpha 混合到不透明度为 0% 的黑色背景上,结果如下:

alpha_bg = 0
alpha_fg = 0.5
alpha_blended = alpha_fg + alpha_bg * (1 - alpha_fg) = 0.5
color_blended = ({0, 0, 255} * alpha_fg + {0, 0, 0} * (alpha_bg * (1 - alpha_fg))) / alpha_blended =
    ({0, 0, 255} * 0.5 + {0, 0, 0} * 0) / 0.5 = {0, 0, 255}

然后,重复这些计算,将不透明度为 50% 的红色方块混合在我们上面计算的颜色之上:

alpha_bg = 0.5
alpha_fg = 0.5
alpha_blended = alpha_fg + alpha_bg * (1 - alpha_fg) = 0.5 + 0.5 * (1 - 0.5) = 0.75
color_blended = ({255, 0, 0} * alpha_fg + {0, 0, 255} * (alpha_bg * (1 - alpha_fg))) / alpha_blended =
    ({255, 0, 0} * 0.5 + {0, 0, 255} * (0.5 * (1 - 0.5))) / 0.75 = {170, 0, 85}