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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值