昔からある古典的な問題でしょうかね。以前も対応した記憶がありますが、また問題に遭遇したのでメモをしておきます。
問題
iPhoneのカメラで撮った写真は、iPhoneやMacでは問題なく表示されるけど、他の機器では上下が逆になったり、90度傾いたりしてしまう。
原因
iPhoneカメラのバグ?上下左右の情報が正しく取れていない。iPhoneの音量ボタンで撮影した時などに起こりやすいらしい。また、iOSのバージョンによっても発生したりしなかったりする。Apple 製品で問題が顕在化しないのは、Appleのプログラムで後述するimageOrientationを元にオリエンテーションを決めているからだと思われる。
解決法
UIImageには`imageOrientation`というプロパティがある。これが、上向きの時は問題ないがそれ以外の場合は、写真のオリエンテーション情報が間違っているかもしれないので、UIImageを再生成して正しく作成し直す。
[code lang=swift]
extension UIImage {
func fixedOrientation() -> UIImage {
if self.imageOrientation == .Up { return self }
UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale)
self.drawInRect(CGRect(origin: CGPointZero, size: self.size))
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return image
}
}
[/code]
UIImageのextensionとして書いてみました。
参考
iphone – iOS UIImagePickerController result image orientation after upload – Stack Overflow