美文网首页
ipad开发 横屏模式下 拍照 照片反转问题

ipad开发 横屏模式下 拍照 照片反转问题

作者: 李美东 | 来源:发表于2017-04-18 09:56 被阅读0次

最近一直在开发ipad App,关于照片这块遇到一个问题:在横屏模式下(向右横屏,Home键在左边),调用系统相机,拍照后 返回的照片 被旋转了180度,感觉也是莫名其妙,iPhone 上就没有这个问题。上网搜索,还真有类似的问题,也有解决办法。下边 贴上代码:

创建一个UIImage的分类,我命名为FixOrientation:

.h文件:

#import@interface UIImage (FixOrientation)

-(UIImage*)fixOrientation:(UIImage *)aImage;

@end

.m文件 :

#import "UIImage+FixOrientation.h"

@implementation UIImage (FixOrientation)

-(UIImage*)fixOrientation:(UIImage*)aImage {

// No-op if the orientation is already correct

if (aImage.imageOrientation == UIImageOrientationUp)

return aImage;

// We need to calculate the proper transformation to make the image upright.

// We do it in 2 steps: Rotate if Left/Right/Down, and then flip if Mirrored.

CGAffineTransform transform = CGAffineTransformIdentity;

switch (aImage.imageOrientation) {

case UIImageOrientationDown:

case UIImageOrientationDownMirrored:

transform = CGAffineTransformTranslate(transform, aImage.size.width, aImage.size.height);

transform = CGAffineTransformRotate(transform, M_PI);

break;

case UIImageOrientationLeft:

case UIImageOrientationLeftMirrored:

transform = CGAffineTransformTranslate(transform, aImage.size.width, 0);

transform = CGAffineTransformRotate(transform, M_PI_2);

break;

case UIImageOrientationRight:

case UIImageOrientationRightMirrored:

transform = CGAffineTransformTranslate(transform, 0, aImage.size.height);

transform = CGAffineTransformRotate(transform, -M_PI_2);

break;

default:

break;

}

switch (aImage.imageOrientation) {

case UIImageOrientationUpMirrored:

case UIImageOrientationDownMirrored:

transform = CGAffineTransformTranslate(transform, aImage.size.width, 0);

transform = CGAffineTransformScale(transform, -1, 1);

break;

case UIImageOrientationLeftMirrored:

case UIImageOrientationRightMirrored:

transform = CGAffineTransformTranslate(transform, aImage.size.height, 0);

transform = CGAffineTransformScale(transform, -1, 1);

break;

default:

break;

}

// Now we draw the underlying CGImage into a new context, applying the transform

// calculated above.

CGContextRef ctx = CGBitmapContextCreate(NULL, aImage.size.width, aImage.size.height,

CGImageGetBitsPerComponent(aImage.CGImage), 0,

CGImageGetColorSpace(aImage.CGImage),

CGImageGetBitmapInfo(aImage.CGImage));

CGContextConcatCTM(ctx, transform);

switch (aImage.imageOrientation) {

case UIImageOrientationLeft:

case UIImageOrientationLeftMirrored:

case UIImageOrientationRight:

case UIImageOrientationRightMirrored:

// Grr...

CGContextDrawImage(ctx, CGRectMake(0,0,aImage.size.height,aImage.size.width), aImage.CGImage);

break;

default:

CGContextDrawImage(ctx, CGRectMake(0,0,aImage.size.width,aImage.size.height), aImage.CGImage);

break;

}

// And now we just create a new UIImage from the drawing context

CGImageRef cgimg = CGBitmapContextCreateImage(ctx);

UIImage *img = [UIImage imageWithCGImage:cgimg];

CGContextRelease(ctx);

CGImageRelease(cgimg);

return img;

}

@end

然后在 选择照片后的回调方法中 调用此方法就可以了。

相关文章

网友评论

      本文标题:ipad开发 横屏模式下 拍照 照片反转问题

      本文链接:https://www.haomeiwen.com/subject/urcfzttx.html