为了账号安全,请及时绑定邮箱和手机立即绑定

如何读取exif数据并从同一io解码图像。读者

如何读取exif数据并从同一io解码图像。读者

Go
天涯尽头无女友 2022-08-01 16:55:05
我正在编写一个用于 graphQL API 的 go 应用程序。gqlgen当用户使用api上传文件时,我将其作为一种类型graphql.Uploadtype Upload struct {    File        io.Reader    Filename    string    Size        int64    ContentType string}我希望能够加载图像的exif数据,解码图像并根据exif方向旋转它。我用于获取exif信息和旋转,但我无法打开两次。它失败了2hd时间。github.com/rwcarlsen/goexif/exifgithub.com/disintegration/imaginggraphql.Upload.Filefunc updateImage(dir string, id int, imgFile *graphql.Upload) error {    image := dbimage.GetImagePathNoTemplate(dir, id)    imageThumbnail := dbimage.GetImageThumbnailPathNoTemplate(dir, id)    var myImage image2.Image    var err error    switch imgFile.ContentType {    case "image/png":        if myImage, err = png.Decode(imgFile.File); err != nil {            return err        }        break    case "image/jpeg":        if myImage, err = jpeg.Decode(imgFile.File); err != nil {            return err        }        break    case "image/webp":        if myImage, err = webpbin.Decode(imgFile.File); err != nil {            return err        }        break    default:        return errors.Errorf("unknown image mimetype %v", imgFile.ContentType)    }   FAILS HERE:  metaData, err := exif.Decode(imgFile.File)   ...}当然,如果我先提取exif,然后解码图像,那么图像解码就会失败。我没有得到文件的完整路径,我只得到一个。我该怎么做才能获取exif并解码图像?io.Reader谢谢
查看完整描述

1 回答

?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

伙计们感谢您的评论。


我注意到我无法投射到.出于某种原因,我认为得到了某种我错过的倒带方法,但事实并非如此。io.Readerio.Seekerio.Reader


所以我所做的是将数据读取到一个字节数组,并在需要时创建新的Reader对象:


byteArray, err := ioutil.ReadAll(imgFile.File)

if err != nil {

    return err

}


switch imgFile.ContentType {

case "image/png":

    if myImage, err = png.Decode(bytes.NewReader(byteArray)); err != nil {

        return err

    }

    break

case "image/jpeg":

    if myImage, err = jpeg.Decode(bytes.NewReader(byteArray)); err != nil {

        return err

    }

    break

case "image/webp":

    if myImage, err = webpbin.Decode(bytes.NewReader(byteArray)); err != nil {

        return err

    }

    break


default:

    return errors.Errorf("unknown image mimetype %v", imgFile.ContentType)

}

metaData, err := exif.Decode(bytes.NewReader(byteArray))


查看完整回答
反对 回复 2022-08-01
  • 1 回答
  • 0 关注
  • 146 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号