首頁 >後端開發 >Golang >如何在 Go 中將 image.Image 轉換為 []byte 以進行 S3 上傳?

如何在 Go 中將 image.Image 轉換為 []byte 以進行 S3 上傳?

Susan Sarandon
Susan Sarandon原創
2024-11-30 21:13:18850瀏覽

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