iPhoneで撮影した画像の上下左右バラバラ問題

iPhoneで撮影した画像の上下左右バラバラ問題昔からある古典的な問題でしょうかね。以前も対応した記憶がありますが、また問題に遭遇したのでメモをしておきます。

問題

iPhoneのカメラで撮った写真は、iPhoneやMacでは問題なく表示されるけど、他の機器では上下が逆になったり、90度傾いたりしてしまう。

原因

iPhoneカメラのバグ?上下左右の情報が正しく取れていない。iPhoneの音量ボタンで撮影した時などに起こりやすいらしい。また、iOSのバージョンによっても発生したりしなかったりする。Apple 製品で問題が顕在化しないのは、Appleのプログラムで後述するimageOrientationを元にオリエンテーションを決めているからだと思われる。

解決法

UIImageには`imageOrientation`というプロパティがある。これが、上向きの時は問題ないがそれ以外の場合は、写真のオリエンテーション情報が間違っているかもしれないので、UIImageを再生成して正しく作成し直す。

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
    }
}

UIImageのextensionとして書いてみました。

参考

iphone – iOS UIImagePickerController result image orientation after upload – Stack Overflow

Pocket
LINEで送る

You may also like...