2014-04-08 18 views
12

Problemi nella conversione di un'immagine.Immagine in [] byte. Il punto problematico è avvolto da linee tratteggiate.Golang Conversione dell'immagine.Immagine su [] byte

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

Fondamentalmente, ho bisogno di essere in new_image [] formato byte in modo che io possa inviare fino al mio secchio S3.

Grazie per l'aiuto.

risposta

30

Si desidera un byte.Buffer, non un bufio.Writer. bytes.Buffer è usato quando hai bisogno di uno scrittore che scrive in memoria. bufio.Writer memorizza semplicemente i dati nella memoria prima di inoltrarli a un altro autore.

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

Grazie Stephen Weinberg! –

5

aggiunta al codice di Stefano, se si sta utilizzando il aws s3 go SDK di mettere un oggetto, il codice sarà simile:

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