亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何讀取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 關注
  • 125 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號