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

如何將 Golang `image.Image` 轉換為 `[]byte` 進行 S3 上傳?

Linda Hamilton
Linda Hamilton原創
2024-12-03 04:52:09574瀏覽

How to Convert a Golang `image.Image` to a `[]byte` for S3 Upload?

在 Golang 中將影像從 image.Image 轉換為 []byte 格式

此問題涉及轉換表示為影像的影像。圖像物件到位元組數組,在 Golang 中表示為 []byte 類型。具體的挑戰在提供的程式碼片段中很明顯,其中轉換步驟用虛線標記。

// ...

original_image, _, err := image.Decode(bytes.NewReader(image_data))

new_image := resize.Resize(160, 0, original_image, resize.Lanczos3)

// Convert the image.Image to []byte here

new_path := key + "_sm"

err = mybucket.Put(new_path, send_S3, "image/jpg", "aclstring")

為了修正這個問題,目的是將儲存在 new_image 中的修改後的影像轉換為位元組數組,允許透過 Put 函數將其傳輸到 S3 儲存桶。

補救措施在於利用 bytes.Buffer 類型,它提供了一個用於寫入資料的記憶體緩衝區。此緩衝區用作 JPEG 編碼影像資料的目的地。相較之下,先前使用的 bufio.Writer 僅在將資料傳遞給底層編寫器之前快取數據,而不將資料累積在記憶體中。

以下是應如何調整程式碼:

buf := new(bytes.Buffer)
err := jpeg.Encode(buf, new_image, nil)
send_s3 := buf.Bytes()

此更新的程式碼使用bytes.Buffer 在記憶體中累積JPEG 編碼的影像數據,然後透過呼叫緩衝區上的Bytes 方法將其作為位元組數組進行檢索。現在可以將此位元組數組傳遞給 Put 函數,以將圖像上傳到 S3 儲存桶。

以上是如何將 Golang `image.Image` 轉換為 `[]byte` 進行 S3 上傳?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn