我正在尝试使用模板绘制图像,模板图像如下
我想用自定义颜色为图像着色红色,绿色,蓝色和黄色,并实现以下目标:
为了达到这个目的,我目前使用这个图像作为基础
然后使用draw.Draw(outfitImage, outfitImage.Bounds(), generatorImage, image.ZP, draw.Over)
然而,这给出了一个非常奇怪的结果(没有接近预期结果),这就是我如何替换像素
func paintPixels(img *image.NRGBA, base color.Color, dst color.Color) {
br, bg, bb, ba := base.RGBA()
dr, dg, db, _ := dst.RGBA()
for x := 0; x < img.Bounds().Dx(); x++ {
for y := 0; y < img.Bounds().Dy(); y++ {
r, g, b, a := img.At(x, y).RGBA()
if br == r && bg == g && bb == b && ba == a {
img.Set(x, y, color.RGBA{uint8(dr), uint8(dg), uint8(db), 255})
}
}
}
}
结果可能会根据我在着色图像模板时使用的Alpha值而有所不同。所以我想不出一种方法来实现预期的结果,我想我应该使用draw.DrawMask
的掩码,但我不知道从哪里开始或如何实现我正在寻找的结果
答案 0 :(得分:1)
如果所有组件都匹配,您看起来只是用颜色替换像素。如果你看一下bild/blend中的合成方法,你应该找到一个适合你组合图像的方法 - 你可能想要Opacity或Multiply模式,并且可以从这个文件中提取代码:
https://github.com/anthonynsimon/bild/blob/master/blend/blend.go