基本任务:更新与 UIImage 关联的元数据的 EXIF 方向属性。我的问题是我不知道方向属性在所有 EXIF 信息中的位置。
复杂的背景:我正在更改返回的图像的方向,imagePickerController:didFinishPickingMediaWithInfo:
所以我认为我还需要在保存图像之前更新元数据writeImageToSavedPhotosAlbum:(CGImageRef)imageRef metadata:(NSDictionary *)metadata
。
换句话说,除非我更改它,否则元数据将包含旧的/初始方向,因此是错误的。我改变方向的原因是因为当我运行Core Image
人脸检测例程时它总是让我绊倒。使用前置摄像头在人像模式下使用 iPhone(设备)拍照,方向为UIImageOrientationRight
(3)。如果我重写图像使方向为UIImageOrientationUp
(0),我会得到很好的人脸检测结果。作为参考,重写图像的例程如下。
我发现整个相机方向的事情非常令人困惑,我似乎正在将自己更深地挖掘到所有这些代码洞中。我看过帖子(这里、这里和这里。根据这篇文章(https://stackoverflow.com/a/3781192/840992):
“相机实际上是横向原生的,所以当你在风景中拍摄照片时你会向上或向下,当你在纵向拍摄照片时你会向左或向右(取决于你拿着设备的方式)。”
...这完全令人困惑。如果上述情况属实,我认为我应该了解前置摄像头UIImageOrientationLeftMirrored
或UIImageOrientationRightMirrored
前置摄像头的方向。这些都不能解释为什么CIDetector
选择器返回的原始图像会失败。
我正在向后接近这个屁股,但我似乎无法定向......
-(UIImage *)normalizedImage:(UIImage *) thisImage
{
if (thisImage.imageOrientation == UIImageOrientationUp) return thisImage;
UIGraphicsBeginImageContextWithOptions(thisImage.size, NO, thisImage.scale);
[thisImage drawInRect:(CGRect){0, 0, thisImage.size}];
UIImage *normalizedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return normalizedImage;
}