您可以尝试下面的代码来修复您的 Uiimage,您可能需要稍微调整一下才能获得自己的正确方向,
- (void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info
{
UIImage *originalImage = (UIImage*) [info objectForKey:UIImagePickerControllerOriginalImage];
//--> get the fixed orientation image
UIImage *fixedImage = [self fixOrientation:originalImage];
}
- (UIImage *)fixOrientation:(UIImage*)takenImage {
// --> check the correct orientation if yes return the same.
if (takenImage.imageOrientation == UIImageOrientationUp) return takenImage;
// --> if taken image orientation is wrong adjust the image as per the correct orientation.
CGAffineTransform transform = CGAffineTransformIdentity;
switch (takenImage.imageOrientation) {
case UIImageOrientationDown:
case UIImageOrientationDownMirrored:
transform = CGAffineTransformTranslate(transform, takenImage.size.width, takenImage.size.height);
transform = CGAffineTransformRotate(transform, M_PI);
break;
case UIImageOrientationLeft:
case UIImageOrientationLeftMirrored:
transform = CGAffineTransformTranslate(transform, takenImage.size.width, 0);
transform = CGAffineTransformRotate(transform, M_PI_2);
break;
case UIImageOrientationRight:
case UIImageOrientationRightMirrored:
transform = CGAffineTransformTranslate(transform, 0, takenImage.size.height);
transform = CGAffineTransformRotate(transform, -M_PI_2);
break;
case UIImageOrientationUp:
case UIImageOrientationUpMirrored:
break;
}
switch (takenImage.imageOrientation) {
case UIImageOrientationUpMirrored:
case UIImageOrientationDownMirrored:
transform = CGAffineTransformTranslate(transform, takenImage.size.width, 0);
transform = CGAffineTransformScale(transform, -1, 1);
break;
case UIImageOrientationLeftMirrored:
case UIImageOrientationRightMirrored:
transform = CGAffineTransformTranslate(transform, takenImage.size.height, 0);
transform = CGAffineTransformScale(transform, -1, 1);
break;
case UIImageOrientationUp:
case UIImageOrientationDown:
case UIImageOrientationLeft:
case UIImageOrientationRight:
break;
}
//--> draw the calculated image above
CGContextRef ctx = CGBitmapContextCreate(NULL, takenImage.size.width, takenImage.size.height,
CGImageGetBitsPerComponent(takenImage.CGImage), 0,
CGImageGetColorSpace(takenImage.CGImage),
CGImageGetBitmapInfo(takenImage.CGImage));
CGContextConcatCTM(ctx, transform);
switch (takenImage.imageOrientation) {
case UIImageOrientationLeft:
case UIImageOrientationLeftMirrored:
case UIImageOrientationRight:
case UIImageOrientationRightMirrored:
CGContextDrawImage(ctx, CGRectMake(0,0,takenImage.size.height,takenImage.size.width), takenImage.CGImage);
break;
default:
CGContextDrawImage(ctx, CGRectMake(0,0,takenImage.size.width,takenImage.size.height), takenImage.CGImage);
break;
}
// return the new fixed image to display
CGImageRef cgimg = CGBitmapContextCreateImage(ctx);
UIImage *img = [UIImage imageWithCGImage:cgimg];
CGContextRelease(ctx);
CGImageRelease(cgimg);
return img;
}
您可以调整代码以获得所需的方向。