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

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

那么..我如何提取“非背景”?来自像素的颜色部分,然后将其添加(或“混合”)在另一个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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top