specifiers - libraries golang
Golang Convertir imagen.Imagen a[] byte (2)
Tiene problemas para convertir una imagen. Imagen a [] byte. El punto problemático está envuelto en líneas de puntos.
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")
Básicamente, necesito que new_image esté en formato de [] byte para poder enviarlo a mi grupo de S3.
Gracias por la ayuda.
Agregando al código de Stephen, si está usando el SDK de aws s3 go para colocar un objeto, su código se vería así:
// create buffer
buff := new(bytes.Buffer)
// encode image to buffer
err = png.Encode(buff, new_image)
if err != nil {
fmt.Println("failed to create buffer", err)
}
// convert buffer to reader
reader := bytes.NewReader(buf.Bytes())
// use it in `PutObjectInput`
putInput := s3.PutObjectInput{
Bucket: aws.String("my_bucket"),
Body: reader,
}
// send response
resp, err := svc.PutObject(&putInput)
Quieres un bytes. Buffer, no un bufio. Escritor. bytes.Buffer se usa cuando necesitas un escritor que escribe en la memoria. bufio.Writer solo almacena en caché los datos en la memoria antes de reenviarlos a otro escritor.
buf := new(bytes.Buffer)
err := jpeg.Encode(buf, new_image, nil)
send_s3 := buf.Bytes()