您的位置:首页 > 其它

解决图片上传到服务器旋转90度的问题(图片倒置)

2016-03-22 14:51 477 查看
#pragma mark

解决上传图旋转90度的方案
- (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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息