在 Golang 中将 image.Image 转换为 []byte
在本文中,我们解决将 image.Image 转换为 [ 的问题]Go 中的字节。痛点在于提供的代码片段中虚线指示的行:
image_data, err := mybucket.Get(key) if err != nil { panic(err.Error()) } // reset format of data []byte to image.Image original_image, _, err := image.Decode(bytes.NewReader(image_data)) new_image := resize.Resize(160, 0, original_image, resize.Lanczos3) - - - - - - - - - - - - - - - - - - - - - - - - - - - // 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) new_path := key + "_sm" err = mybucket.Put(new_path, send_S3, "image/jpg", "aclstring")
目标是将 image.Image、new_image 转换为 []byte 格式以上传到 S3 存储桶。
解决方案
解决这个问题的关键是利用bytes.Buffer 而不是 bufio.Writer。 bytes.Buffer 旨在将数据写入内存,而 bufio.Writer 只是将数据缓存在内存中,然后将其传递给另一个写入器。
buf := new(bytes.Buffer) err := jpeg.Encode(buf, new_image, nil) send_s3 := buf.Bytes()
通过使用 bytes.Buffer,我们可以有效地将编码图像捕获到名为 send_s3 的 [] 字节切片。然后可以使用该切片将图像上传到 S3 存储桶。
以上是如何在 Go 中将 image.Image 转换为 []byte 以进行 S3 上传?的详细内容。更多信息请关注PHP中文网其他相关文章!