如何用透明像素更改图像的背景?

时间:2009-09-10 16:37:11

标签: language-agnostic graphics background-color antialiasing

确切的背景颜色是已知的。

想象一下绿色背景上的抗锯齿字体。现在我们要将图像的背景颜色更改为红色。

那么..如何从像素中提取颜色的“非背景”部分,然后在另一个bg颜色之上添加它(或“混合”)?

我们也知道字体颜色,因此我们知道哪些像素是完全不透明的。

1 个答案:

答案 0 :(得分:2)

图像中的每个像素都是背景颜色,字体颜色或两者的某种混合。因此,您可以使用背景RGB值,字体RGB值以及介于0和1之间的值数组来指定整个图像,其中,例如,0表示像素是背景颜色,1表示像素是字体颜色。像0.1这样的值意味着像素主要是带有少量字体颜色的背景颜色等。

表达式如下:

blend_value = ((pixel.R - bg.R) / (font.R - bg.R)
              + (pixel.G - bg.G) / (font.G - bg.G)
              + (pixel.B - bg.B) / (font.B - bg.B)) / 3

将为图像中的任何像素提供这些值。要使用新的背景颜色构造新的RGB值,可以使用此值将字体颜色与新的背景颜色混合。

new_pixel.R = blend_value * font.R + (1 - blend_value) * new_bg.R
new_pixel.G = blend_value * font.G + (1 - blend_value) * new_bg.G
new_pixel.B = blend_value * font.B + (1 - blend_value) * new_bg.B