iPhone在Z轴上时的UIImage方向

Río*_*ire 6 iphone core-graphics avfoundation uiimage ios

我正在使用类似于此博客http://blog.logichigh.com/2008/06/05/uiimage-fix/上的代码, 在我用iPhone相机拍摄后旋转图像.我在用AVFoundation.

我在这里提取了相关代码:

    case UIImageOrientationUp: //EXIF = 1  
        transform = CGAffineTransformIdentity;  
        break;  

    case UIImageOrientationUpMirrored: //EXIF = 2  
        transform = CGAffineTransformMakeTranslation(imageSize.width, 0.0);  
        transform = CGAffineTransformScale(transform, -1.0, 1.0);  
        break;  

    case UIImageOrientationDown: //EXIF = 3  
        transform = CGAffineTransformMakeTranslation(imageSize.width, imageSize.height);  
        transform = CGAffineTransformRotate(transform, M_PI);  
        break;  

    case UIImageOrientationDownMirrored: //EXIF = 4  
        transform = CGAffineTransformMakeTranslation(0.0, imageSize.height);  
        transform = CGAffineTransformScale(transform, 1.0, -1.0);  
        break;  

    case UIImageOrientationLeftMirrored: //EXIF = 5  
        boundHeight = bounds.size.height;  
        bounds.size.height = bounds.size.width;  
        bounds.size.width = boundHeight;  
        transform = CGAffineTransformMakeTranslation(imageSize.height, imageSize.width);  
        transform = CGAffineTransformScale(transform, -1.0, 1.0);  
        transform = CGAffineTransformRotate(transform, 3.0 * M_PI / 2.0);  
        break;  

    case UIImageOrientationLeft: //EXIF = 6  
        boundHeight = bounds.size.height;  
        bounds.size.height = bounds.size.width;  
        bounds.size.width = boundHeight;  
        transform = CGAffineTransformMakeTranslation(0.0, imageSize.width);  
        transform = CGAffineTransformRotate(transform, 3.0 * M_PI / 2.0);  
        break;  

    case UIImageOrientationRightMirrored: //EXIF = 7  
        boundHeight = bounds.size.height;  
        bounds.size.height = bounds.size.width;  
        bounds.size.width = boundHeight;  
        transform = CGAffineTransformMakeScale(-1.0, 1.0);  
        transform = CGAffineTransformRotate(transform, M_PI / 2.0);  
        break;  

    case UIImageOrientationRight: //EXIF = 8  
        boundHeight = bounds.size.height;  
        bounds.size.height = bounds.size.width;  
        bounds.size.width = boundHeight;  
        transform = CGAffineTransformMakeTranslation(imageSize.height, 0.0);  
        transform = CGAffineTransformRotate(transform, M_PI / 2.0);  
        break;  
Run Code Online (Sandbox Code Playgroud)

当手机放在XY轴上时,此功能正常.

但是,当我把手机放在Z轴上时.它始终显示UIImageEXIF = 2.

我知道我可以使用加速度计来判断设备何时在Z轴上.但是,我无法看到一条路径,可以让我区分拍摄时的图像,并标记这些图像,因为它们仍然存在EXIF = 2.

即它可以让我区分在Z上拍摄的照片.但它不允许我区分照片本身,例如Landscape1(左侧的iPhone Home按钮,Portrait,Landscape2(右侧的iPhone Home按钮) 在此输入图像描述

Jef*_*lin 0

EXIF 数据仅报告 XY 方向。EXIF 数据中没有任何内容可以告诉您相机是朝上还是朝下。您可以在捕获图像时获取设备方向:

[[UIDevice currentDevice] orientation]
Run Code Online (Sandbox Code Playgroud)

然后,您只需跟踪图像及其上/下方向,与 EXIF 数据分开。如果您将图像存储在应用程序中,则可以使用一个简单的数据库表,甚至可以使用序列化的 NSDictionary,其中图像名称作为键,向上/向下方向作为值。