2014-04-08 3 views
12

Masz problemy z konwersją obrazu.Image to [] byte. Punkt problemowy jest zawijany liniami przerywanymi.Golang Konwertowanie obrazu.Image na [] bajt

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

Zasadniczo muszę new_image się w [] Bajt formatu tak, że mogę wysłać go do mojego S3 wiadra.

Dzięki za pomoc.

Odpowiedz

30

Potrzebujesz bajtów.Bufnik, a nie bufio.Writer. bytes.Buffer jest używany, gdy potrzebujesz pisarza, który zapisuje do pamięci. bufio.Writer buforuje dane w pamięci przed przekazaniem do innego programu piszącego.

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

Dzięki Stephen Weinberg! –

5

Dodanie do kodu Szczepana, jeśli używasz aws s3 go SDK umieścić przedmiot, Twój kod będzie wyglądać następująco:

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