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

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

Patricia Arquette
リリース: 2024-12-20 05:46:10
オリジナル
577 人が閲覧しました

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート