1. ホーム
  2. iphone

[解決済み] iOSの画像の向きがおかしい件

2023-01-18 04:03:54

質問

この数週間、私は objective-c で画像を扱っていて、多くの奇妙な動作に気づきました。 まず、他の多くの人々と同様に、カメラで撮影した (または他の人のカメラで撮影して私に MMS で送信した) 画像が 90 度回転してしまうという問題が発生しました。 一体なぜこんなことが起こるのか、よくわかりませんでした(そのため 私の質問 で撮った (または他のカメラで撮って私に MMS を送った) 画像が 90 度回転してしまうのです。

今回質問したいのは なぜこのようなことが起こるのでしょうか? ? なぜAppleは画像を回転させるのか? 私がカメラの右側を上にして写真を撮ったとき、私が上記の私のコードを実行しない限り、私が写真を保存するとき、それは回転して保存されます。 さて、私の回避策は、数日前までは大丈夫でした。

私のアプリケーションは、画像の個々のピクセル、特に PNG のアルファ チャンネルを変更します (したがって、私のシナリオでは JPEG 変換は窓から投げ出されます)。 数日前、私の回避コードのおかげで画像がアプリで適切に表示されているにもかかわらず、私のアルゴリズムが画像の個々のピクセルを変更するとき、画像が回転していると考えることに気づきました。 つまり、画像の上部のピクセルを修正する代わりに、画像の側面のピクセルを修正するのです(回転していると考えるため)! メモリ内で画像を回転させる方法がわかりません。理想を言えば、このような imageOrientation フラグをすべて取り除くことが理想的です。

ここで、私も困惑していることがあるのですが...。写真を撮ると imageOrientation は 3 に設定されています。私の回避コードは十分に賢明で、これを認識して反転させるので、ユーザーは決して気づきません。 さらに、画像をライブラリに保存する私のコードでは、このことに気づいて反転させます。 その後 で保存し、カメラロールに正しく表示されるようにします。

そのコードは以下のようなものです。

NSData* pngdata = UIImagePNGRepresentation (self.workingImage); //PNG wrap 
UIImage* img = [self rotateImageAppropriately:[UIImage imageWithData:pngdata]];   
UIImageWriteToSavedPhotosAlbum(img, nil, nil, nil);

この新しく保存した画像をアプリに読み込むと imageOrientation は 0 になります。まさに私が見たいもので、回転の回避策を実行する必要さえありません (注意: カメラで撮影した画像ではなく、インターネットから画像を読み込む場合は imageOrientation は常に 0 であり、その結果、完璧な動作となります)。 何らかの理由で、私の保存コードでは、この imageOrientation フラグを消去してしまうようです。 私はそのコードを盗んで、ユーザーが写真を撮影してアプリに追加されるとすぐに、私の imageOrientation を消去するために使用したいと思っていましたが、うまくいかないようです。 どうすれば UIImageWriteToSavedPhotosAlbum で何か特別なことをするのでしょうか? imageOrientation ?

この問題に対する最良の解決策は、単に imageOrientation を吹き飛ばすことでしょうか。 Apple は理由があって回転の動作をさせているのでしょう? 何人かの人が、これは Apple の欠陥であると示唆しました。

(...もし、まだ迷っていないなら...) Note2です。 横向きの写真を撮ると、インターネットから撮った写真と同じように、すべてが完璧に動作するようです)

EDIT

実際にどのような画像やシナリオがあるのかを紹介します。 これまでのコメントから、この奇妙な動作は iPhone だけの動作ではなさそうで、それは良いことだと思います。

これは私の携帯電話で撮影した写真です (適切な方向に注意してください)。写真をスナップしたとき、私の携帯電話で撮影したのとまったく同じように表示されます。

自分宛にメールした後、Gmailで画像を見るとこんな感じです(Gmailではちゃんと処理されているようです)。

Windowsで画像をサムネイルにするとこんな感じです(うまく処理できていないようです)。

そして、実際の画像をWindowsフォトビューアで開くとこんな感じです(まだうまく処理できていません)。

この質問に対するすべてのコメントの後、私が考えていることは次のとおりです...。iPhone は画像を受け取り、「これを正しく表示するには、90 度回転させる必要があります」と言います。 この情報は、EXIFデータの中にあるはずです。 (なぜ90度回転させる必要があるのかは分かりませんが、デフォルトでは垂直のままです)。 ここから、Gmailは十分に賢く、そのEXIFデータを読み込んで分析し、適切に表示することができます。 しかし、Windowsは、EXIFデータを読み取るほど賢くないので、画像を表示します。 不適切に . 私の仮定は正しいですか?

どのように解決するのですか?

私はそれをR&Dして、すべての画像ファイルは、メタデータのプロパティを持っていることを発見しました。メタデータが画像の向きを指定している場合、Mac 以外の OS では一般に無視されます。撮影された画像のほとんどは、メタデータのプロパティが直角に設定されています。そのため、Macでは90度回転した形で表示されます。Windows OSでは、同じ画像を正しく表示することができます。

より詳細な情報は、こちらの回答をご覧ください。 http://graphicssoft.about.com/od/digitalphotography/f/sideways-pictures.htm

画像の exif を読み取るには、ここをクリックしてください。 http://www.exifviewer.org/ または http://regex.info/exif.cgi または http://www.addictivetips.com/internet-tips/view-complete-exif-metadata-information-of-any-jpeg-image-online/