去画图像蒙版

Go draw over image mask

我正在尝试使用模板绘制图像,模板图像如下

我想用自定义颜色为图像着色红色、绿色、蓝色和黄色,并实现如下效果:

为了实现这一点,我目前使用这张图片作为基础

然后使用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 的掩码,但我不知道从哪里开始或如何实现我正在寻找的结果

如果所有组件都匹配,您看起来只是用颜色替换像素。如果您查看 bild/blend 中的合成方法,您应该会找到适合您组合图像的方法 - 您可能需要不透明度或正片叠底模式,并且可以从此文件中提取代码:

https://github.com/anthonynsimon/bild/blob/master/blend/blend.go