• 相册里的照片是有方向,再根据图片的方向,再反回来就好了!


    相册里的照片是有方向,再根据图片的方向,再反回来就好了!

      1. + (void)fixOrientation:(UIImage *)aImage {
      2.     if (aImage==nil || !aImage) {
      3.         return;
      4.     }
      5.     // No-op if the orientation is already correct
      6.     if (aImage.imageOrientation == UIImageOrientationUp) return;
      7.    
      8.     // We need to calculate the proper transformation to make the image upright.
      9.     // We do it in 2 steps: Rotate if Left/Right/Down, and then flip if Mirrored.
      10.     CGAffineTransform transform = CGAffineTransformIdentity;
      11.     UIImageOrientation orientation=aImage.imageOrientation;
      12.     int orientation_=orientation;
      13.     switch (orientation_) {
      14.         case UIImageOrientationDown:
      15.         case UIImageOrientationDownMirrored:
      16.             transform = CGAffineTransformTranslate(transform, aImage.size.width, aImage.size.height);
      17.             transform = CGAffineTransformRotate(transform, M_PI);
      18.             break;
      19.            
      20.         case UIImageOrientationLeft:
      21.         case UIImageOrientationLeftMirrored:
      22.             transform = CGAffineTransformTranslate(transform, aImage.size.width, 0);
      23.             transform = CGAffineTransformRotate(transform, M_PI_2);
      24.             break;
      25.            
      26.         case UIImageOrientationRight:
      27.         case UIImageOrientationRightMirrored:
      28.             transform = CGAffineTransformTranslate(transform, 0, aImage.size.height);
      29.             transform = CGAffineTransformRotate(transform, -M_PI_2);
      30.             break;
      31.     }
      32.    
      33.     switch (orientation_) {
      34.         case UIImageOrientationUpMirrored:{
      35.        
      36.         }
      37.         case UIImageOrientationDownMirrored:
      38.             transform = CGAffineTransformTranslate(transform, aImage.size.width, 0);
      39.             transform = CGAffineTransformScale(transform, -1, 1);
      40.             break;
      41.            
      42.         case UIImageOrientationLeftMirrored:
      43.         case UIImageOrientationRightMirrored:
      44.             transform = CGAffineTransformTranslate(transform, aImage.size.height, 0);
      45.             transform = CGAffineTransformScale(transform, -1, 1);
      46.             break;
      47.     }
      48.    
      49.     // Now we draw the underlying CGImage into a new context, applying the transform
      50.     // calculated above.
      51.     CGContextRef ctx = CGBitmapContextCreate(NULL, aImage.size.width, aImage.size.height,
      52.                                              CGImageGetBitsPerComponent(aImage.CGImage), 0,
      53.                                              CGImageGetColorSpace(aImage.CGImage),
      54.                                              CGImageGetBitmapInfo(aImage.CGImage));
      55.     CGContextConcatCTM(ctx, transform);
      56.     switch (aImage.imageOrientation) {
      57.         case UIImageOrientationLeft:
      58.         case UIImageOrientationLeftMirrored:
      59.         case UIImageOrientationRight:
      60.         case UIImageOrientationRightMirrored:
      61.             // Grr...
      62.             CGContextDrawImage(ctx, CGRectMake(0,0,aImage.size.height,aImage.size.width), aImage.CGImage);
      63.             break;
      64.            
      65.         default:
      66.             CGContextDrawImage(ctx, CGRectMake(0,0,aImage.size.width,aImage.size.height), aImage.CGImage);
      67.             break;
      68.     }
      69.    
      70.     // And now we just create a new UIImage from the drawing context
      71.     CGImageRef cgimg = CGBitmapContextCreateImage(ctx);
      72.     UIImage *img = [UIImage imageWithCGImage:cgimg];
      73.     CGContextRelease(ctx);
      74.     CGImageRelease(cgimg);
      75.     aImage=img;
      76.     img=nil;
      77. }
  • 相关阅读:
    1128项目跟进
    冲刺一 (day 3)
    1118 冲刺1-需求文档(初稿)
    1117 新冲刺 day1
    0622 总结与回顾
    0621 第三次冲刺
    0617 主存空间的分配和回收
    学习进度条
    软件工程学期总结
    学术诚信与职业道德
  • 原文地址:https://www.cnblogs.com/muyushifang07/p/4793574.html
Copyright © 2020-2023  润新知