Lorsque vous traitez le traitement d'image dans Go, vous devrez peut-être convertir entre les formats image.Image et []byte . Cela peut être utile pour stocker des images dans une base de données, les envoyer par câble ou effectuer diverses opérations sur les images.
Dans votre cas spécifique, vous essayez de redimensionner une image à l'aide du package resize, puis de convertir le new_image modifié en un tableau []byte pour le téléchargement vers un compartiment S3. Cependant, votre code contient un problème critique souligné ci-dessous :
// 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)
Le problème est que vous utilisez bufio.NewWriter pour envelopper une tranche de []byte, ce qui n'est pas correct pour votre objectif. bufio.Writer est conçu pour diffuser la sortie vers un périphérique d'E/S, et non pour conserver des données binaires en mémoire.
Pour résoudre ce problème, vous devez plutôt utiliser un bytes.Buffer. bytes.Buffer fournit un tampon en mémoire qui peut être utilisé pour construire une []byte slice :
buf := new(bytes.Buffer) err := jpeg.Encode(buf, new_image, nil) send_S3 := buf.Bytes()
Ce code crée un objet bytes.Buffer nommé buf et utilise la fonction jpeg.Encode pour écrire le redimensionné les données d'image en buf. La méthode Bytes() de buf renvoie ensuite le tableau d'octets brut représentant l'image encodée.
Avec cette modification, votre code convertira correctement la new_image en un tableau []byte, vous permettant de la télécharger avec succès sur 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!