Maison >développement back-end >Golang >Comment encoder efficacement une image.Image redimensionnée en un []octet dans Go ?

Comment encoder efficacement une image.Image redimensionnée en un []octet dans Go ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-05 18:49:10973parcourir

How to Efficiently Encode a Resized image.Image to a []byte in Go?

Décodage et encodage d'images à l'aide de Go

Dans Go, conversion d'une image d'un type image.Image en une tranche d'octets ([]byte ) est essentiel pour le stockage et la transmission des données d'image. Cet article présente un problème courant rencontré lors de cette conversion et propose une solution.

L'extrait de code fourni tente de télécharger une image à partir d'un bucket, de la décoder en image, de la redimensionner, puis de convertir l'image redimensionnée. image vers une tranche d'octets pour le téléchargement sur S3. Cependant, c'est dans la section en surbrillance du code que réside le problème.

// 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 qu'un bufio.Writer est utilisé pour mettre les données en cache avant de les écrire sur un autre rédacteur, mais dans ce cas, nous avons besoin pour écrire directement dans une mémoire tampon. Pour résoudre ce problème, nous utilisons plutôt un bytes.Buffer, qui écrit dans la mémoire.

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

En utilisant un bytes.Buffer, l'image redimensionnée est écrite directement dans la mémoire, créant ainsi la tranche d'octets adaptée à téléchargement sur S3. Cela permet au code d'encoder et de télécharger avec succès l'image redimensionnée dans le compartiment souhaité.

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