ホームページ >バックエンド開発 >Golang >効率的なストレージと転送のために Go image.Image を []byte に変換するにはどうすればよいですか?

効率的なストレージと転送のために Go image.Image を []byte に変換するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-20 05:46:10607ブラウズ

How to Convert a Go image.Image to a []byte for Efficient Storage and Transmission?

Go で Image.Image を []byte に変換する

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。