确切的背景颜色是已知的。
想象一下绿色背景上的抗锯齿字体。现在我们要将图像的背景颜色更改为红色。
那么..如何从像素中提取颜色的“非背景”部分,然后在另一个bg颜色之上添加它(或“混合”)?
我们也知道字体颜色,因此我们知道哪些像素是完全不透明的。
答案 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