我正在使用UIImagePickerController捕获图像然后存储它 . 但是,当我尝试重新缩放它时,我从这个图像中取出的方向值是不正确的 . 当我拿着手机向上拍摄时,它会给我左手方向 . 有没有人遇到过这个问题?
UIImagePickerController字典显示以下信息:
{
UIImagePickerControllerMediaMetadata = {
DPIHeight = 72;
DPIWidth = 72;
Orientation = 3;
"{Exif}" = {
ApertureValue = "2.970853654340484";
ColorSpace = 1;
DateTimeDigitized = "2011:02:14 10:26:17";
DateTimeOriginal = "2011:02:14 10:26:17";
ExposureMode = 0;
ExposureProgram = 2;
ExposureTime = "0.06666666666666667";
FNumber = "2.8";
Flash = 32;
FocalLength = "3.85";
ISOSpeedRatings = (
125
);
MeteringMode = 1;
PixelXDimension = 2048;
PixelYDimension = 1536;
SceneType = 1;
SensingMethod = 2;
Sharpness = 1;
ShutterSpeedValue = "3.910431673351467";
SubjectArea = (
1023,
767,
614,
614
);
WhiteBalance = 0;
};
"{TIFF}" = {
DateTime = "2011:02:14 10:26:17";
Make = Apple;
Model = "iPhone 3GS";
Software = "4.2.1";
XResolution = 72;
YResolution = 72;
};
};
UIImagePickerControllerMediaType = "public.image";
UIImagePickerControllerOriginalImage = "<UIImage: 0x40efb50>";
}
但是图片返回 imageOrientation == 1
;
UIImage *picture = [info objectForKey:UIImagePickerControllerOriginalImage];
6 回答
我刚开始在自己的应用程序中处理这个问题 .
我使用了Trevor Harmon制作的UIImage类别,用于调整图像大小并修正其方向,UIImage+Resize .
然后你可以在
-imagePickerController:didFinishPickingMediaWithInfo:
做这样的事情这解决了我的问题 . 已调整大小的图像在视觉上正确定向,imageOrientation属性报告UIImageOrientationUp .
这个缩放/调整大小/裁剪代码有几个版本;我使用了Trevor,因为它看起来很干净,还包括一些我想稍后使用的其他UIImage操纵器 .
这是我找到的修复方向问题;适合我
这是一个可以有效解决问题的Swift片段:
我使用以下代码放在一个单独的图像实用程序对象文件中,该文件包含许多用于UIImages的其他编辑方法:
然后我打电话
在iOS 7中,我需要依赖于UIImage.imageOrientation的代码来校正不同的方向 . 现在,在iOS 8.2中,当我通过UIImagePickerController从相册中选择旧的测试图像时,所有图像的方向都是UIImageOrientationUp . 当我拍照(UIImagePickerControllerSourceTypeCamera)时,无论设备方向如何,这些图像也将始终向上 . 因此,在这些iOS版本之间,显然已经有一个修复,如果需要,UIImagePickerController已经旋转了图像 . 您甚至可以注意到,当显示相册图像时:一瞬间,它们将以原始方向显示,然后才会以新的向上方向显示 .
唯一对我有用的是重新渲染图像,这会强制正确的方向 .