我有一个像素的 RGB 元组,我们称之为 P。
(255, 0, 0) 是 Alpha 通道为 1.0 的 P 的颜色。
Alpha 通道为 0.8 时,P 的颜色变为 (255, 51, 51)。
如何获得影响 P 颜色的像素颜色?
我有一个像素的 RGB 元组,我们称之为 P。
(255, 0, 0) 是 Alpha 通道为 1.0 的 P 的颜色。
Alpha 通道为 0.8 时,P 的颜色变为 (255, 51, 51)。
如何获得影响 P 颜色的像素颜色?
让我们从头开始。带有 alpha 的像素只有在与其他东西混合时才有意义。如果你有一个带有 alpha 的上层 U 和一个完全不透明的下层 L,则方程为:
P = (alpha * U) + ((1.0 - alpha) * L)
重新排列公式,您将获得:
L = (P - (alpha * U)) / (1.0 - alpha)
显然,当 alpha 为 1.0 时,该等式没有意义,因为您将被零除。
将您的数字代入显示像素 L 的 R=255、G=255 和 B=255。
按照惯例,图像中的最低层将全是白色(255,255,255)几乎是普遍的。
只需查看您提供的数字:
(1.0-0.8)*255 ~= 50.9 = 51
在哪里:
这适合您示例的 B 和 G 通道。
因此,在一般情况下,它似乎是通道值(RGB 之一)和背景颜色(在您的情况下为白色 - 255)之间的简单加权平均值。Alpha 被用作权重。
这是一些Python代码:
MIN_ALPHA=0.0
MAX_ALPHA=1.0
MIN_CH=0
MAX_CH=255
BG_VAL=255
def apply_alpha(old, alpha, bg=255):
assert alpha >= MIN_ALPHA
assert alpha <= MAX_ALPHA
assert old >= MIN_CH
assert old <= MAX_CH
new = old*alpha + (MAX_ALPHA - alpha)*bg
return new
if __name__ == '__main__':
import sys
old, alpha = map(float, sys.argv[1:])
print apply_alpha(old, alpha)
还有一些输出:
misha@misha-K42Jr:~/Desktop/stackoverflow$ python alpha.py 255 0.8
255.0
misha@misha-K42Jr:~/Desktop/stackoverflow$ python alpha.py 0 0.8
51.0
试试这个用于其他示例(特别是非白色背景)——它可能就是这么简单。如果没有,请使用新示例编辑您的答案,我再看看。