Go 中进行图像处理时,可能需要在 image.Image 和 []byte 格式之间进行转换。这对于将图像存储在数据库中、通过网络发送图像或执行各种图像操作非常有用。
在您的特定情况下,您尝试使用调整大小包调整图像大小,然后将将 new_image 修改为 []byte 数组以上传到 S3 存储桶。但是,您的代码包含下面突出显示的关键问题:
// reset format the image.Image to data []byte here var send_S3 []byte var byteWriter = bufio.NewWriter(send_S3) // ... err = jpeg.Encode(byteWriter, new_image, nil)
问题是您正在使用 bufio.NewWriter 来包装 []byte 切片,这不符合您的目的。 bufio.Writer 设计用于将输出流式传输到 I/O 设备,而不是用于在内存中保存二进制数据。
要解决此问题,您应该使用 bytes.Buffer 来代替。 bytes.Buffer 提供了一个内存缓冲区,可用于构造 []byte 切片:
buf := new(bytes.Buffer) err := jpeg.Encode(buf, new_image, nil) send_S3 := buf.Bytes()
这段代码创建了一个名为 buf 的 bytes.Buffer 对象,并使用 jpeg.Encode 函数写入将图像数据调整大小到 buf 中。 buf 的 Bytes() 方法然后返回表示编码图像的原始字节数组。
通过此修改,您的代码将正确地将 new_image 转换为 []byte 数组,从而允许您成功将其上传到 S3 .
以上是如何将Go image.Image转换为[]byte以便高效存储和传输?的详细内容。更多信息请关注PHP中文网其他相关文章!