Image 如何将golang中的白色背景更改为透明?

Image 如何将golang中的白色背景更改为透明?,image,go,transparent,Image,Go,Transparent,如何将Golang图像的白色背景更改为透明 我想把白色背景变成半透明的颜色,你有什么建议吗?一般来说这是不可能的,但是有一些启发式的方法可以尝试 为什么不可能呢 如果原始图像有一些透明像素,并在纯白色背景或任何已知背景上渲染,则结果图像中会丢失信息。例如,粉色像素是由具有一定透明度的红色像素创建的,还是由不具有透明度的真正粉色像素创建的 即使是纯白色像素也可能原本是全白色的,或者完全透明的,或者介于两者之间 启发式方法 如果你知道一些关于原始图像的信息,或者通过观察可以推断出一些信息,那么你就可

如何将Golang图像的白色背景更改为透明


我想把白色背景变成半透明的颜色,你有什么建议吗?

一般来说这是不可能的,但是有一些启发式的方法可以尝试

为什么不可能呢

如果原始图像有一些透明像素,并在纯白色背景或任何已知背景上渲染,则结果图像中会丢失信息。例如,粉色像素是由具有一定透明度的红色像素创建的,还是由不具有透明度的真正粉色像素创建的

即使是纯白色像素也可能原本是全白色的,或者完全透明的,或者介于两者之间

启发式方法

如果你知道一些关于原始图像的信息,或者通过观察可以推断出一些信息,那么你就可以推断出原始像素的颜色和透明度。简单的第一步是,如果外部像素是白色的,那么您可能希望用完全透明的像素填充该区域。彩色区域内的白色区域也可能是透明的孔

接下来,假设透明度用于抗锯齿,则可以推断单色对象周围边界像素的颜色。例如,对于周长上有粉红色像素的红色圆圈,它们很可能最初是红色的,具有一定的透明度,导致它们以不同的粉红色着色。对于更复杂的多色形状,您可以通过使用原始图像的判断、知识/猜测以及如何执行抗锯齿的知识手动编辑图像,从而获得合理的结果


许多年前,我编写了一个Paint.Net插件C来自动完成这类工作,有时它会给出合理的结果,但通常需要手动完成。

软件包图像具有解码功能

func Decode(r io.Reader) (Image, string, error)
图像是界面

type Image interface {
        // ColorModel returns the Image's color model.
        ColorModel() color.Model
        // Bounds returns the domain for which At can return non-zero color.
        // The bounds do not necessarily contain the point (0, 0).
        Bounds() Rectangle
        // At returns the color of the pixel at (x, y).
        // At(Bounds().Min.X, Bounds().Min.Y) returns the upper-left pixel of the grid.
        // At(Bounds().Max.X-1, Bounds().Max.Y-1) returns the lower-right one.
        At(x, y int) color.Color
}
将文件解码为image.image后,可以从边界获取高度和宽度,从Atx、y获取颜色

下面是下一步要做的事情:

使用alpha通道制作另一个图像, 将整个图像一个像素一个像素地迭代, 检查颜色,在你做任何你想做的事情之后把颜色复制到新的图像上。
你能发布一个展示你尝试过的东西吗?这里的上下文是什么?你在制作网页吗?桌面应用程序?请参阅: