【发布时间】:2026-01-19 02:30:01
【问题描述】:
我使用的代码与此博客 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;
当手机放在X 或Y 轴上时,这可以正常工作。
但是,当我将手机放在Z 轴上时。它总是显示UIImage 有EXIF = 2。
我知道我可以使用加速度计来判断设备何时位于Z 轴上。但是,我无法看到一条路径可以引导我在拍摄时区分图像,并标记此标记,因为它们仍然有EXIF = 2。
即它可以让我区分在 Z 上拍摄的照片。但它不允许我区分照片本身,例如Landscape1(iPhone Home 按钮在左侧,Portrait,Landscape2(iPhone Home 按钮在右侧)
【问题讨论】:
-
你用的是什么版本的ios?
-
我正在测试的手机有 iOS 6。
-
请问您需要使用陀螺仪吗?
-
当我们谈论拍摄照片时相机的方向(即纵向主页底部,纵向主页顶部,横向主页左侧,横向主页右侧)时,Z轴在哪里?
-
根本无法判断。不管手机朝上还是朝下,谁来拍照?
标签: iphone ios uiimage core-graphics avfoundation