Maison >développement back-end >Golang >Comment convertir une image.Image en []byte dans Go pour le téléchargement S3 ?

Comment convertir une image.Image en []byte dans Go pour le téléchargement S3 ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-30 21:13:18854parcourir

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

Conversion d'image.Image en []byte dans Golang

Dans cet article, nous abordons la question de la conversion d'une image.Image en [ ]octet dans Go. Le problème réside dans les lignes indiquées par des lignes pointillées dans l'extrait de code fourni :

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")

L'objectif est de transformer l'image.Image, new_image, au format []byte pour le téléchargement vers un bucket S3.

Solution

La clé pour résoudre ce problème est d'utiliser un bytes.Buffer au lieu de un bufio.Écrivain. bytes.Buffer est conçu pour écrire des données en mémoire, tandis que bufio.Writer met simplement les données en cache en mémoire avant de les transmettre à un autre écrivain.

buf := new(bytes.Buffer)
err := jpeg.Encode(buf, new_image, nil)
send_s3 := buf.Bytes()

En employant bytes.Buffer, nous capturons efficacement l'image codée dans une tranche de []octets nommée send_s3. Cette tranche peut ensuite être utilisée pour télécharger l'image dans le compartiment S3.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn