Guest User

Untitled

a guest
Jul 2nd, 2014
412
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. - (UIImage *)fixOrientation {
  2.    
  3.     // No-op if the orientation is already correct
  4.     if (self.imageOrientation == UIImageOrientationUp) return self;
  5.    
  6.     // We need to calculate the proper transformation to make the image upright.
  7.     // We do it in 2 steps: Rotate if Left/Right/Down, and then flip if Mirrored.
  8.     CGAffineTransform transform = CGAffineTransformIdentity;
  9.    
  10.     switch (self.imageOrientation) {
  11.         case UIImageOrientationDown:
  12.         case UIImageOrientationDownMirrored:
  13.             transform = CGAffineTransformTranslate(transform, self.size.width, self.size.height);
  14.             transform = CGAffineTransformRotate(transform, M_PI);
  15.             break;
  16.            
  17.         case UIImageOrientationLeft:
  18.         case UIImageOrientationLeftMirrored:
  19.             transform = CGAffineTransformTranslate(transform, self.size.width, 0);
  20.             transform = CGAffineTransformRotate(transform, M_PI_2);
  21.             break;
  22.            
  23.         case UIImageOrientationRight:
  24.         case UIImageOrientationRightMirrored:
  25.             transform = CGAffineTransformTranslate(transform, 0, self.size.height);
  26.             transform = CGAffineTransformRotate(transform, -M_PI_2);
  27.             break;
  28.         case UIImageOrientationUp:
  29.         case UIImageOrientationUpMirrored:
  30.             break;
  31.     }
  32.    
  33.     switch (self.imageOrientation) {
  34.         case UIImageOrientationUpMirrored:
  35.         case UIImageOrientationDownMirrored:
  36.             transform = CGAffineTransformTranslate(transform, self.size.width, 0);
  37.             transform = CGAffineTransformScale(transform, -1, 1);
  38.             break;
  39.            
  40.         case UIImageOrientationLeftMirrored:
  41.         case UIImageOrientationRightMirrored:
  42.             transform = CGAffineTransformTranslate(transform, self.size.height, 0);
  43.             transform = CGAffineTransformScale(transform, -1, 1);
  44.             break;
  45.         case UIImageOrientationUp:
  46.         case UIImageOrientationDown:
  47.         case UIImageOrientationLeft:
  48.         case UIImageOrientationRight:
  49.             break;
  50.     }
  51.    
  52.     // Now we draw the underlying CGImage into a new context, applying the transform
  53.     // calculated above.
  54.     CGContextRef ctx = CGBitmapContextCreate(NULL, self.size.width, self.size.height,
  55.                                              CGImageGetBitsPerComponent(self.CGImage), 0,
  56.                                              CGImageGetColorSpace(self.CGImage),
  57.                                              CGImageGetBitmapInfo(self.CGImage));
  58.     CGContextConcatCTM(ctx, transform);
  59.     switch (self.imageOrientation) {
  60.         case UIImageOrientationLeft:
  61.         case UIImageOrientationLeftMirrored:
  62.         case UIImageOrientationRight:
  63.         case UIImageOrientationRightMirrored:
  64.             // Grr...
  65.             CGContextDrawImage(ctx, CGRectMake(0,0,self.size.height,self.size.width), self.CGImage);
  66.             break;
  67.            
  68.         default:
  69.             CGContextDrawImage(ctx, CGRectMake(0,0,self.size.width,self.size.height), self.CGImage);
  70.             break;
  71.     }
  72.    
  73.     // And now we just create a new UIImage from the drawing context
  74.     CGImageRef cgimg = CGBitmapContextCreateImage(ctx);
  75.     UIImage *img = [UIImage imageWithCGImage:cgimg];
  76.     CGContextRelease(ctx);
  77.     CGImageRelease(cgimg);
  78.     return img;
  79. }
Add Comment
Please, Sign In to add comment