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