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