Go で画像処理を扱う場合、image.Image 形式と []byte 形式の間で変換する必要がある場合があります。 。これは、画像をデータベースに保存したり、ネットワーク経由で送信したり、さまざまな画像操作を実行したりする場合に便利です。
あなたの特定のケースでは、resize パッケージを使用して画像のサイズを変更し、その後、 S3 バケットにアップロードするために new_image を []byte 配列に変更しました。ただし、コードには、以下で強調表示されている重大な問題が含まれています:
// 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 中国語 Web サイトの他の関連記事を参照してください。