iphone相机拍的照片自动旋转的问题解决

1,312 阅读1分钟

满足几个条件:

1.大于2M

2.进行过处理,剪切/压缩等。

3.在别的平台显示

解决方法就是:如下👇

+ (UIImage*)fixOrientation:(UIImage*)originImg {


if(originImg.imageOrientation==UIImageOrientationUp)returnoriginImg;


CGAffineTransform transform = CGAffineTransformIdentity;


switch(originImg.imageOrientation) {caseUIImageOrientationDown:caseUIImageOrientationDownMirrored: transform =CGAffineTransformTranslate(transform, originImg.size.width, originImg.size.height); transform =CGAffineTransformRotate(transform,M_PI);break;


case UIImageOrientationLeft:

case UIImageOrientationLeftMirrored:

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

transform =CGAffineTransformRotate(transform,M_PI_2);

break;


case UIImageOrientationRight:

case UIImageOrientationRightMirrored:

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

transform =CGAffineTransformRotate(transform, -M_PI_2);

break;

default:

break;

}


switch (originImg.imageOrientation) { case UIImageOrientationUpMirrored: case UIImageOrientationDownMirrored: transform = CGAffineTransformTranslate(transform, originImg.size.width, 0); transform = CGAffineTransformScale(transform, -1, 1); break;


case UIImageOrientationLeftMirrored:

case UIImageOrientationRightMirrored:

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

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

break;

default:

break;

}


CGContextRef ctx = CGBitmapContextCreate(NULL, originImg.size.width, originImg.size.height, CGImageGetBitsPerComponent(originImg.CGImage), 0, CGImageGetColorSpace(originImg.CGImage), CGImageGetBitmapInfo(originImg.CGImage)); CGContextConcatCTM(ctx, transform); switch (originImg.imageOrientation) { case UIImageOrientationLeft: case UIImageOrientationLeftMirrored: case UIImageOrientationRight: case UIImageOrientationRightMirrored:


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

break;


default:

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

break;

}


CGImageRef cgimg = CGBitmapContextCreateImage(ctx); UIImage *img = [UIImage imageWithCGImage:cgimg]; CGContextRelease(ctx); CGImageRelease(cgimg); return img;


}


ps:在上传到别的平台之前,处理之后调用这个方法。