将 PNG 图像转换为原始 []byte Golang

我有一个 PNG 格式的图像,它只是一个尺寸为 1x512 的数组。我需要没有 PNG 格式的原始字节。如何在 Go 中将 PNG 转换为原始字节。


我有一些 python 代码可以满足我的需求,但我无法在 Go 中找到相同的功能:


image = Image.open(io.BytesIO(features))

array = np.frombuffer(image.tobytes(), dtype=np.float32)


墨色风雨
浏览 217回答 2
2回答

达令说

这是一个比您的解决方案更通用的解决方案。它使用图像本身的尺寸而不是硬编码值。func imageToRGBA(img image.Image) []uint8 {&nbsp; &nbsp; sz := img.Bounds()&nbsp; &nbsp; raw := make([]uint8, (sz.Max.X-sz.Min.X)*(sz.Max.Y-sz.Min.Y)*4)&nbsp; &nbsp; idx := 0&nbsp; &nbsp; for y := sz.Min.Y; y < sz.Max.Y; y++ {&nbsp; &nbsp; &nbsp; &nbsp; for x := sz.Min.X; x < sz.Max.X; x++ {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; r, g, b, a := img.At(x, y).RGBA()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; raw[idx], raw[idx+1], raw[idx+2], raw[idx+3] = uint8(r), uint8(g), uint8(b), uint8(a)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; idx += 4&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; return raw}

慕慕森

我找到了一个解决方案:请注意,这会在 x 轴上复制图像中的值,并且 x 最大值为 512!const FeatureVectorDimensionLength = 512func imageToRaw(img image.Image) [2048]byte {&nbsp; &nbsp; var b [FeatureVectorDimensionLength*4]byte&nbsp; &nbsp; for i := 0; i < FeatureVectorDimensionLength; i++ {&nbsp; &nbsp; &nbsp; &nbsp; nrgba := img.At(i, 0).(color.NRGBA)&nbsp; &nbsp; &nbsp; &nbsp; idx := i*4&nbsp; &nbsp; &nbsp; &nbsp; b[idx], b[idx+1], b[idx+2], b[idx+3] = nrgba.R, nrgba.G, nrgba.B, nrgba.A&nbsp; &nbsp; }&nbsp; &nbsp; return b}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go