【问题标题】:Golang Converting image.Image to []byteGolang 将 image.Image 转换为 []byte
【发布时间】:2014-04-08 18:36:05
【问题描述】:

无法将 image.Image 转换为 []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")

基本上,我需要 new_image 采用 []byte 格式,以便我可以将其发送到我的 S3 存储桶。

感谢您的帮助。

【问题讨论】:

    标签: go


    【解决方案1】:

    你想要一个 bytes.Buffer,而不是 bufio.Writer。 bytes.Buffer 在您需要写入内存的写入器时使用。 bufio.Writer 只是将数据缓存在内存中,然后再将其转发给另一个写入器。

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

    【讨论】:

      【解决方案2】:

      添加到 Stephen 的代码,如果您使用 aws s3 go SDK 放置对象,您的代码将如下所示:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-06-04
        • 1970-01-01
        • 2011-06-08
        • 1970-01-01
        • 2014-07-21
        • 1970-01-01
        • 2019-06-27
        相关资源
        最近更新 更多