【问题标题】:Golang png draw transparentgolang png画透明
【发布时间】:2016-09-25 22:01:17
【问题描述】:

我正在尝试绘制多个透明图像以形成一个大图像并将其保存为 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.Over 而不是draw.Src?
  • 忘记了。解决了!
  • 仅供参考,您将关闭作为函数中的倒数第二行。在检查返回该函数的错误后推迟它。因此,在您的示例中,将关闭推迟到具有变量 profileImage 的行之前。

标签: image go


【解决方案1】:

如 cmets 中所述。

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

【讨论】:

    猜你喜欢
    • 2011-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 2012-11-11
    • 2012-03-28
    • 2013-10-04
    • 2020-04-13
    相关资源
    最近更新 更多