请问一下,这是 PNG 编码问题还是 Golang 的 bug?

2021 年 9 月 18 日
 sadfQED2

我新建了一个宽高都为 1 的图片,然后将这个图片的色值设置为 RGBA(255,255,255,10)

然后保存为 PNG 图片,接着从新打开图片,取出这一个像素点,结果这个点的值变成 4 4 4 10 了???我查了很多 png 格式相关的文章,都没有提到 alpha 值会影响 RGB 值呀?

直接上代码

	newRgba := image.NewRGBA(image.Rect(0, 0, 1, 1)) //new image
	newRgba.SetRGBA(0, 0, color.RGBA{R: 255, G: 255, B: 255, A: 10})
	f, _ := os.Create("./save.png")
	defer f.Close()
	// save image
	png.Encode(f, newRgba)

	ff, _ := ioutil.ReadFile("./save.png") //read image
	bbb := bytes.NewBuffer(ff)
	m, _, _ := image.Decode(bbb)

	R, G, B, A := m.At(0, 0).RGBA()
	fmt.Println(R>>8,
		G>>8,
		B>>8,
		A>>8,
	)  // 输出 4 4 4 10
	fmt.Printf("%#v\n", m.At(0, 0))

为了验证这个问题,我有拿 python 写了一遍同样的功能,代码如下

from PIL import Image
img = Image.new('RGBA', (1, 1), (255, 255, 255,10))
img.save('bg.png')


im = Image.open('bg.png')
pix = im.load()

print(pix[0,0])  # 输出 255 255 255 10

在 python 里面是没问题的。

766 次点击
所在节点    问与答
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.ih06.com/t/802791

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX