Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image Golang png绘制透明_Image_Go - Fatal编程技术网

Image Golang png绘制透明

Image Golang png绘制透明,image,go,Image,Go,我正在尝试绘制多个透明图像以形成一个大图像,并将其保存为PNG func generateUserImage(username string, items []models.Item) error { imageFile, err := os.Create("public/items/users/" + username + ".png") if err != nil { return err } profileImage := image.New

我正在尝试绘制多个透明图像以形成一个大图像,并将其保存为PNG

func generateUserImage(username string, items []models.Item) error {
    imageFile, err := os.Create("public/items/users/" + username + ".png")
    if err != nil {
        return err
    }
    profileImage := image.NewRGBA(image.Rect(0, 0, 261, 336))
    for _, item := range items {
        revel.INFO.Println(item)
        itemFile, err := os.Open("public/items/universe/" + item.Type + "/" + item.Name + ".png")
        if err != nil {
            return err
        }
        itemImage, err := png.Decode(itemFile)
        if err != nil {
            return err
        }
        draw.Draw(profileImage, profileImage.Bounds(), itemImage, image.Point{0, 0}, draw.Src)
        itemFile.Close()
    }
    err = png.Encode(imageFile, profileImage)
    if err != nil {
        return err
    }
    defer imageFile.Close()
    return nil
}
除了最终图像将只包含范围循环的最后一个图像(即使范围循环5次)之外,其他一切似乎都正常工作。所有图像均为.png,背景透明。下面是一个关于图像外观的演示

您可以尝试保存图像并查看背景是否透明。。。所以我不知道为什么最终的图像只包含一个图像而不是全部


如评论中所述,谢谢

draw.Draw(profileImage, profileImage.Bounds(), itemImage, image.Point{0, 0}, draw.Over)

使用
draw.Over
而不是
draw.Src
?忘了这一点。这就解决了!仅供参考,您将关闭延迟为函数中倒数第二行。在检查返回该值的函数的错误后,延迟该值。因此,在您的示例中,将关闭延迟到包含变量profileImage的行之前。