UIImage图像旋转

【https://gist.github.com/1531596】


  
  
  
  
@interface UIImage (fixOrientation)

- ( UIImage * ) fixOrientation ;

@end


  
  
  
  
@implementation UIImage (fixOrientation)

- ( 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 ;
     }

     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 ;
     }

     // 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 ;
}

@end

你可能感兴趣的:(image,null,interface,transformation)