首页 >后端开发 >Golang >如何在 Go 中将 image.Image 转换为 []byte 以进行 S3 上传?

如何在 Go 中将 image.Image 转换为 []byte 以进行 S3 上传?

Susan Sarandon
Susan Sarandon原创
2024-11-30 21:13:18854浏览

How to Convert an image.Image to []byte in Go for S3 Upload?

在 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn