ホームページ > バックエンド開発 > Golang > S3 アップロード用に Go で image.Image を []byte に変換するにはどうすればよいですか?

S3 アップロード用に Go で image.Image を []byte に変換するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-11-30 21:13:18
オリジナル
904 人が閲覧しました

How to Convert an image.Image to []byte in Go for S3 Upload?

Golang で image.Image を [] バイトに変換する

この記事では、image.Image を [ に変換する問題に対処します。 ]Goのバイト。問題点は、提供されたコード スニペットの点線で示された行にあります:

image_data, err := mybucket.Get(key)

if err != nil {
    panic(err.Error())
}

// reset format of data []byte to image.Image

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

new_image := resize.Resize(160, 0, original_image, resize.Lanczos3)
- - - - - - - - - - - - - - - - - - - - - - - - - - -
// 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)

new_path := key + "_sm"

err = mybucket.Put(new_path, send_S3, "image/jpg", "aclstring")
ログイン後にコピー

目的は、S3 バケットにアップロードするために image.Image、new_image を []byte 形式に変換することです。

解決策

この問題を解決する鍵は、 bufio.Writer の代わりに bytes.Buffer を使用します。 bytes.Buffer はメモリにデータを書き込むように設計されていますが、bufio.Writer は別のライターに渡す前に単にデータをメモリにキャッシュします。

buf := new(bytes.Buffer)
err := jpeg.Encode(buf, new_image, nil)
send_s3 := buf.Bytes()
ログイン後にコピー

bytes.Buffer を採用することで、エンコードされたイメージを効果的にキャプチャします。 send_s3 という名前の [] バイトのスライス。このスライスを使用して、画像を S3 バケットにアップロードできます。

以上がS3 アップロード用に Go で image.Image を []byte に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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