UIImage+RQExtension.m 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. //
  2. // UIImage+RQExtension.m
  3. // test23
  4. //
  5. // Created by apple on 15/12/1.
  6. // Copyright (c) 2015年 JCZ. All rights reserved.
  7. //
  8. #import "UIImage+RQExtension.h"
  9. @implementation UIImage(RQExtension)
  10. //将JPEG格式转换为PNG
  11. -(UIImage *)reduceImage:(UIImage *)image percent:(float)percent
  12. {
  13. NSData *imageData = UIImageJPEGRepresentation(image, percent);
  14. UIImage *newImage = [UIImage imageWithData:imageData];
  15. return newImage;
  16. }
  17. //压缩图片尺寸
  18. - (UIImage *)scaledToSize:(CGSize)newSize
  19. {
  20. //首先要找到缩放比 按长的适配 不足的部分空白
  21. CGFloat rate =newSize.width*1.0/ self.size.width ;
  22. if (self.size.height* rate > newSize.height) {
  23. //过长了。
  24. rate =newSize.height*1.0/ self.size.height ;
  25. }
  26. CGSize size = CGSizeMake(self.size.width*rate, self.size.height*rate);
  27. // Create a graphics image context
  28. UIGraphicsBeginImageContext(size);
  29. // new size
  30. [self drawInRect:CGRectMake(0,0,size.width,size.height)];
  31. // Get the new image from the context
  32. UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
  33. // End the context
  34. UIGraphicsEndImageContext();
  35. // Return the new image.
  36. return newImage;
  37. }
  38. - (UIImage *)scaledAndCutToSize:(CGSize)newSize{
  39. //首先要找到缩放比 按短的适配 长的部分裁减掉
  40. CGFloat rate =newSize.width*1.0/ self.size.width ;
  41. if (self.size.height* rate < newSize.height) {
  42. //过长了。
  43. rate =newSize.height*1.0/ self.size.height ;
  44. }
  45. CGSize size = CGSizeMake(self.size.width*rate, self.size.height*rate);
  46. UIGraphicsBeginImageContext(size);
  47. [self drawInRect:CGRectMake(0,0,size.width,size.height)];
  48. // Get the new image from the context
  49. UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
  50. // End the context
  51. UIGraphicsEndImageContext();
  52. // Return the new image.
  53. return newImage;
  54. }
  55. - (UIImage*)imageRotatedByDegrees:(CGFloat)degrees
  56. {
  57. CGFloat width = CGImageGetWidth(self.CGImage);
  58. CGFloat height = CGImageGetHeight(self.CGImage);
  59. CGSize rotatedSize;
  60. rotatedSize.width = width;
  61. rotatedSize.height = height;
  62. UIGraphicsBeginImageContext(rotatedSize);
  63. CGContextRef bitmap = UIGraphicsGetCurrentContext();
  64. CGContextTranslateCTM(bitmap, rotatedSize.width/2, rotatedSize.height/2);
  65. CGContextRotateCTM(bitmap, degrees * M_PI / 180);
  66. CGContextRotateCTM(bitmap, M_PI);
  67. CGContextScaleCTM(bitmap, -1.0, 1.0);
  68. CGContextDrawImage(bitmap, CGRectMake(-rotatedSize.width/2, -rotatedSize.height/2, rotatedSize.width, rotatedSize.height), self.CGImage);
  69. UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
  70. UIGraphicsEndImageContext();
  71. return newImage;
  72. }
  73. + (UIImage *)fixOrientation:(UIImage *)image {
  74. // No-op if the orientation is already correct
  75. if (image.imageOrientation == UIImageOrientationUp) return image;
  76. // We need to calculate the proper transformation to make the image upright.
  77. // We do it in 2 steps: Rotate if Left/Right/Down, and then flip if Mirrored.
  78. CGAffineTransform transform = CGAffineTransformIdentity;
  79. switch (image.imageOrientation) {
  80. case UIImageOrientationDown:
  81. case UIImageOrientationDownMirrored:
  82. transform = CGAffineTransformTranslate(transform, image.size.width, image.size.height);
  83. transform = CGAffineTransformRotate(transform, M_PI);
  84. break;
  85. case UIImageOrientationLeft:
  86. case UIImageOrientationLeftMirrored:
  87. transform = CGAffineTransformTranslate(transform, image.size.width, 0);
  88. transform = CGAffineTransformRotate(transform, M_PI_2);
  89. break;
  90. case UIImageOrientationRight:
  91. case UIImageOrientationRightMirrored:
  92. transform = CGAffineTransformTranslate(transform, 0, image.size.height);
  93. transform = CGAffineTransformRotate(transform, -M_PI_2);
  94. break;
  95. default:
  96. break;
  97. }
  98. switch (image.imageOrientation) {
  99. case UIImageOrientationUpMirrored:
  100. case UIImageOrientationDownMirrored:
  101. transform = CGAffineTransformTranslate(transform, image.size.width, 0);
  102. transform = CGAffineTransformScale(transform, -1, 1);
  103. break;
  104. case UIImageOrientationLeftMirrored:
  105. case UIImageOrientationRightMirrored:
  106. transform = CGAffineTransformTranslate(transform, image.size.height, 0);
  107. transform = CGAffineTransformScale(transform, -1, 1);
  108. break;
  109. default:
  110. break;
  111. }
  112. // Now we draw the underlying CGImage into a new context, applying the transform
  113. // calculated above.
  114. CGContextRef ctx = CGBitmapContextCreate(NULL, image.size.width, image.size.height,
  115. CGImageGetBitsPerComponent(image.CGImage), 0,
  116. CGImageGetColorSpace(image.CGImage),
  117. CGImageGetBitmapInfo(image.CGImage));
  118. CGContextConcatCTM(ctx, transform);
  119. switch (image.imageOrientation) {
  120. case UIImageOrientationLeft:
  121. case UIImageOrientationLeftMirrored:
  122. case UIImageOrientationRight:
  123. case UIImageOrientationRightMirrored:
  124. // Grr...
  125. CGContextDrawImage(ctx, CGRectMake(0, 0, image.size.height, image.size.width), image.CGImage);
  126. break;
  127. default:
  128. CGContextDrawImage(ctx, CGRectMake(0, 0, image.size.width, image.size.height), image.CGImage);
  129. break;
  130. }
  131. // And now we just create a new UIImage from the drawing context
  132. CGImageRef cgimg = CGBitmapContextCreateImage(ctx);
  133. UIImage *img = [UIImage imageWithCGImage:cgimg];
  134. CGContextRelease(ctx);
  135. CGImageRelease(cgimg);
  136. return img;
  137. }
  138. @end