2017-03-21 12 views
1

私は数週間、画像のアップロード機能に取り組んでいます。私はGolangをバックエンド言語として使用しています。IOSデバイスからamazon s3に送られたイメージをアップロードするのが目的です。画像をアップロードする過程で、私はまた、それらのサイズを変更し、これは主にデコード方法は、時々私は私が使用しているライブラリは、この素晴らしい1 https://github.com/disintegration/imagingとあるGolangどのように回転させずに外部画像をアップロードできますか

file, handler, err := r.FormFile("file") 
     if err != nil { 
      fmt.Println("Error Uploading Image") 
      return 
     } 
     defer file.Close() 
     // the code below sometimes rotates an image 
     img,err := imaging.Decode(file) 
     if err != nil { 
      print("Imaging Open error") 
     } 
     new_image := imaging.Resize(img,400,400, imaging.Lanczos) 

を望んでいない画像を回転させる問題を引き起こしています彼らが示した例は一例で結構ですが、私のイメージはローカルに保存されていない、彼らはIOSデバイスから来ていることを、この

src, err := imaging.Open("testdata/lena_512.png") 
    if err != nil { 
     log.Fatalf("Open failed: %v", err) 
    } 

    src = imaging.Resize(src, 256, 0, imaging.Lanczos) 

だった私は、この問題を解決するために行うことができます何かありますか?私のイメージの中には、いくつかの画像は、このように回転させると、それは私が画像を回転ないしかし、いくつかの他の画像でそれを修正することができ、それを Some images are rotated and saved like this

をやってデコードする方法である。この

のように保存されていますデコードによって回転され、最後にRotate270メソッドによって回転されます。

img,err := imaging.Decode(file) 
     if err != nil { 
      print("Imaging Open error") 
     } 
     // rotate the image 
     img = imaging.Rotate270(img) 

     new_image := imaging.Resize(img,400,400, imaging.Lanczos) 

これは、画像を保存して回転させる方法です。どこかで、デコードを使わずに、あるいは単にデコードの問題を修正しなくても、外部の画像をアップロードできますか? Imaging.Resize最初のパラメータはEXIFタグで回転残念ながら、外出先STDLIBイメージパッケージは、(マークされている画像を処理しない

func myImages(w http.ResponseWriter, r *http.Request) { 
    r.ParseForm() 
    var buff bytes.Buffer 
file, handler, err := r.FormFile("file") 
     if err != nil { 
      fmt.Println("Error Uploading Image") 
      return 
     } 
     defer file.Close() 

     img,err := imaging.Decode(file) 
     if err != nil { 
      print("Imaging Open error") 
     } 


     new_image := imaging.Resize(img,400,400, imaging.Lanczos) 
     var buf bytes.Buffer 




     err = imaging.Encode(&buf,new_image, imaging.JPEG) 
     if err != nil { 
      log.Println(err) 
      return 
     } 
    } 

enter image description here

+2

デコードは、画像を回転していない、イメージが元々により、出口の向きタグに表示時に回転させました。イメージを回転する方法を決定するには、そのタグを読み取る必要があります。 – JimB

+1

写真からExifデータを確認する必要があります。私はあなたの写真を回転させているイメージングではないと思います。 – apxp

答えて

6

私の完全なコードタイプimage.Imageにとり、ここにありますデバイスを逆さまにして撮影したもののように)。この程度のバグはここにある:

https://github.com/golang/go/issues/4341

あなたはcamlistoreでこれを扱うの例を見ることができますが、それは非常に複雑である:

https://camlistore.googlesource.com/camlistore/+/master/pkg/images/images.go

まず、あなたは(EXIFオプションをデコードする必要がありますDecodeOpts)を使用している場合は、それがどの方向にあるかをチェックし(8つのうち可能なもの)、必要に応じて回転させる必要があります。それは苦痛で、まだ簡単な解決策はありません。あなたはしかし、EXIFデータを読み取るために、このパッケージを使用することができます。

https://github.com/rwcarlsen/goexif

関連する問題