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中文網其他相關文章!