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 中找到的唯一选择。
起初我认为这是一个 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 中找到的唯一选择。