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