2014-04-08 10 views
12

Probleme beim Konvertieren eines image.Image in [] Byte. Der Problempunkt ist in gepunktete Linien eingeschlossen.Golang Konvertieren von image.Image in [] 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") 

Grundsätzlich, ich brauche new_image in [] Byte-Format zu sein, so dass ich es bis zu meinem S3 Eimer senden kann.

Danke für die Hilfe.

Antwort

30

Sie möchten einen bytes.Buffer, kein bufio.Writer. Bytes.Buffer wird verwendet, wenn Sie einen Writer benötigen, der in den Speicher schreibt. bufio.Writer speichert Daten im Speicher, bevor sie an einen anderen Writer weitergeleitet werden.

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

Dank Stephen Weinberg! –

5

Hinzufügen auf Stephans-Code, wenn Sie die aws s3 go SDK verwenden um ein Objekt zu setzen, würde der Code wie folgt aussehen:

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