拍照获得的照片,在ImageView中显示时方向有问题的解决方法

创建一个UIImage的类扩展:UIImage+Extension,在.m文件中写如下方法:

- ( UIImage *)fixOrientation
{
   
   
// No-op if the orientation is already correct
   
if ( self . imageOrientation == UIImageOrientationUp ) return self ;
   
   
// 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 ( self . imageOrientation ) {
       
case UIImageOrientationDown :
       
case UIImageOrientationDownMirrored :
            transform =
CGAffineTransformTranslate (transform, self . size . width , self . size . height );
            transform =
CGAffineTransformRotate (transform, M_PI );
           
break ;
           
       
case UIImageOrientationLeft :
       
case UIImageOrientationLeftMirrored :
            transform =
CGAffineTransformTranslate (transform, self . size . width , 0 );
            transform =
CGAffineTransformRotate (transform, M_PI_2 );
           
break ;
           
       
case UIImageOrientationRight :
       
case UIImageOrientationRightMirrored :
            transform =
CGAffineTransformTranslate (transform, 0 , self . size . height );
            transform =
CGAffineTransformRotate (transform, - M_PI_2 );
           
break ;
       
case UIImageOrientationUp :
       
case UIImageOrientationUpMirrored :
           
break ;
    }
   
   
switch ( self . imageOrientation ) {
       
case UIImageOrientationUpMirrored :
       
case UIImageOrientationDownMirrored :
            transform =
CGAffineTransformTranslate (transform, self . size . width , 0 );
            transform =
CGAffineTransformScale (transform, - 1 , 1 );
           
break ;
           
       
case UIImageOrientationLeftMirrored :
       
case UIImageOrientationRightMirrored :
            transform =
CGAffineTransformTranslate (transform, self . size . height , 0 );
            transform =
CGAffineTransformScale (transform, - 1 , 1 );
           
break ;
       
case UIImageOrientationUp :
       
case UIImageOrientationDown :
       
case UIImageOrientationLeft :
       
case UIImageOrientationRight :
           
break ;
    }
   
   
// Now we draw the underlying CGImage into a new context, applying the transform
   
// calculated above.
   
CGContextRef ctx = CGBitmapContextCreate ( NULL , self . size . width , self . size . height ,
                                            
CGImageGetBitsPerComponent ( self . CGImage ), 0 ,
                                            
CGImageGetColorSpace ( self . CGImage ),
                                            
CGImageGetBitmapInfo ( self . CGImage ));
   
CGContextConcatCTM (ctx, transform);
   
switch ( self . imageOrientation ) {
       
case UIImageOrientationLeft :
       
case UIImageOrientationLeftMirrored :
       
case UIImageOrientationRight :
       
case UIImageOrientationRightMirrored :
           
// Grr...
           
CGContextDrawImage (ctx, CGRectMake ( 0 , 0 , self . size . height , self . size . width ), self . CGImage );
           
break ;
           
       
default :
           
CGContextDrawImage (ctx, CGRectMake ( 0 , 0 , self . size . width , self . size . height ), self . 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;
}

调用方式:UIImage * fixedImage = oldImage.fixOrientation;

你可能感兴趣的:(拍照获得的照片,在ImageView中显示时方向有问题的解决方法)