Golang,下载图像后透明背景显示为黑色

Golang, transparent background appears black once image is downloaded

起初我认为这是一个 mac 的问题,因为黑暗模式,但不是。

我的软件在图像中插入徽标。

插入完成后,可以将图像另存为 png、jpeg 或 pdf。 即使在对整个图像应用白色背景后,将其下载为 png 时,徽标周围也会有黑色背景。 仅PDF版本,logo正确显示为白底。

这是转换:

func moveLogoPosition(mainImage, logo image.Image, poseX, poseY, width, size int, excavate bool) {
    const regularMainImageSize = 300

    m := resize.Resize(uint(75), 0, logo, resize.Bilinear)
    sr := m.Bounds()

    xOrigin := mainImage.Bounds().Size().X/2 - sr.Size().X/2
    yOrigin := mainImage.Bounds().Size().Y/2 - sr.Size().Y/2
    xFinal := xOrigin + sr.Bounds().Size().X
    yFinal := yOrigin + sr.Bounds().Size().Y

    r := image.Rectangle{
        Min: image.Point{X: xOrigin + poseX, Y: yOrigin + poseY},
        Max: image.Point{X: xFinal + poseX, Y: yFinal + poseY},
    }

    draw.Draw(mainImage.(*image.NRGBA), r, m, sr.Min, draw.Src)
}

我想知道我是否遗漏了什么,我应该把背景画成白色吗?老实说,我不太确定该怎么做。

另一方面,主图没有透明度问题!

我正在加入当前结果的示例(作为 png)

好的,所以如果您尝试让透明度自行运行,您会遇到太多问题,具体取决于 OS、PNG 的质量等

因此我们强制将透明像素绘制为白色(在我们的例子中)以确保: 不仅“非挖掘透明”部分正确显示为白色,而且要确保如果要用插画或其他方式打开的徽标/图像,正确支持现在白色的“透明”。

这是我添加的:

white := color.RGBA{255, 255, 255, 255}
draw.Draw(mainImage, r, &image.Uniform{C: white}, image.Point{}, draw.Src)
draw.Draw(mainImage, r, m, sr.Min, draw.Over)

我不知道这是否对任何人有帮助,但这是我在 Go 中找到的唯一选择。