UIImagePickerController返回错误的图像方向

Mus*_*afa 11 scale orientation uiimagepickercontroller uiimage

我正在使用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>";
}
Run Code Online (Sandbox Code Playgroud)

然而图片返回imageOrientation == 1;

UIImage *picture = [info objectForKey:UIImagePickerControllerOriginalImage];             
Run Code Online (Sandbox Code Playgroud)

Bil*_*son 15

我刚开始在自己的应用程序中处理这个问题.

我使用了Trevor Harmon制作的UIImage类别,用于调整图像大小并修复其方向,UIImage + Resize.

然后你可以做这样的事情 -imagePickerController:didFinishPickingMediaWithInfo:

UIImage *pickedImage = [info objectForKey:UIImagePickerControllerEditedImage];
UIImage *resized = [pickedImage resizedImageWithContentMode:UIViewContentModeScaleAspectFit bounds:pickedImage.size interpolationQuality:kCGInterpolationHigh];

这解决了我的问题.已调整大小的图像在视觉上正确定向,imageOrientation属性报告UIImageOrientationUp.

这个缩放/调整大小/裁剪代码有几个版本; 我使用了Trevor,因为它看起来很干净,还包括一些我想稍后使用的其他UIImage操纵器.


She*_*pta 8

这就是我找到的解决方向问题; 适合我

UIImage *initialImage = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
NSData *data = UIImagePNGRepresentation(self.initialImage);

UIImage *tempImage = [UIImage imageWithData:data];
UIImage *fixedOrientationImage = [UIImage imageWithCGImage:tempImage.CGImage
                                     scale:initialImage.scale
                               orientation:self.initialImage.imageOrientation];
initialImage = fixedOrientationImage;
Run Code Online (Sandbox Code Playgroud)


Jea*_*nan 7

这是一个可以有效解决问题的Swift片段:

let orientedImage = UIImage(CGImage: initialImage.CGImage, scale: 1, orientation: initialImage.imageOrientation)!
Run Code Online (Sandbox Code Playgroud)