123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- //
- // UIImage+RQExtension.m
- // test23
- //
- // Created by apple on 15/12/1.
- // Copyright (c) 2015年 JCZ. All rights reserved.
- //
- #import "UIImage+RQExtension.h"
- @implementation UIImage(RQExtension)
- //将JPEG格式转换为PNG
- -(UIImage *)reduceImage:(UIImage *)image percent:(float)percent
- {
- NSData *imageData = UIImageJPEGRepresentation(image, percent);
- UIImage *newImage = [UIImage imageWithData:imageData];
- return newImage;
- }
- //压缩图片尺寸
- - (UIImage *)scaledToSize:(CGSize)newSize
- {
- //首先要找到缩放比 按长的适配 不足的部分空白
- CGFloat rate =newSize.width*1.0/ self.size.width ;
- if (self.size.height* rate > newSize.height) {
- //过长了。
- rate =newSize.height*1.0/ self.size.height ;
- }
- CGSize size = CGSizeMake(self.size.width*rate, self.size.height*rate);
-
- // Create a graphics image context
- UIGraphicsBeginImageContext(size);
- // new size
- [self drawInRect:CGRectMake(0,0,size.width,size.height)];
- // Get the new image from the context
- UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
-
- // End the context
- UIGraphicsEndImageContext();
- // Return the new image.
- return newImage;
- }
- - (UIImage *)scaledAndCutToSize:(CGSize)newSize{
-
- //首先要找到缩放比 按短的适配 长的部分裁减掉
- CGFloat rate =newSize.width*1.0/ self.size.width ;
- if (self.size.height* rate < newSize.height) {
- //过长了。
- rate =newSize.height*1.0/ self.size.height ;
- }
- CGSize size = CGSizeMake(self.size.width*rate, self.size.height*rate);
-
- UIGraphicsBeginImageContext(size);
-
- [self drawInRect:CGRectMake(0,0,size.width,size.height)];
- // Get the new image from the context
- UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
-
- // End the context
- UIGraphicsEndImageContext();
- // Return the new image.
- return newImage;
- }
- - (UIImage*)imageRotatedByDegrees:(CGFloat)degrees
- {
-
- CGFloat width = CGImageGetWidth(self.CGImage);
- CGFloat height = CGImageGetHeight(self.CGImage);
-
- CGSize rotatedSize;
-
- rotatedSize.width = width;
- rotatedSize.height = height;
-
- UIGraphicsBeginImageContext(rotatedSize);
- CGContextRef bitmap = UIGraphicsGetCurrentContext();
- CGContextTranslateCTM(bitmap, rotatedSize.width/2, rotatedSize.height/2);
- CGContextRotateCTM(bitmap, degrees * M_PI / 180);
- CGContextRotateCTM(bitmap, M_PI);
- CGContextScaleCTM(bitmap, -1.0, 1.0);
- CGContextDrawImage(bitmap, CGRectMake(-rotatedSize.width/2, -rotatedSize.height/2, rotatedSize.width, rotatedSize.height), self.CGImage);
- UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
- UIGraphicsEndImageContext();
- return newImage;
- }
- + (UIImage *)fixOrientation:(UIImage *)image {
- // No-op if the orientation is already correct
- if (image.imageOrientation == UIImageOrientationUp) return image;
-
- // 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 (image.imageOrientation) {
- case UIImageOrientationDown:
- case UIImageOrientationDownMirrored:
- transform = CGAffineTransformTranslate(transform, image.size.width, image.size.height);
- transform = CGAffineTransformRotate(transform, M_PI);
- break;
-
- case UIImageOrientationLeft:
- case UIImageOrientationLeftMirrored:
- transform = CGAffineTransformTranslate(transform, image.size.width, 0);
- transform = CGAffineTransformRotate(transform, M_PI_2);
- break;
-
- case UIImageOrientationRight:
- case UIImageOrientationRightMirrored:
- transform = CGAffineTransformTranslate(transform, 0, image.size.height);
- transform = CGAffineTransformRotate(transform, -M_PI_2);
- break;
-
- default:
- break;
- }
-
- switch (image.imageOrientation) {
- case UIImageOrientationUpMirrored:
- case UIImageOrientationDownMirrored:
- transform = CGAffineTransformTranslate(transform, image.size.width, 0);
- transform = CGAffineTransformScale(transform, -1, 1);
- break;
-
- case UIImageOrientationLeftMirrored:
- case UIImageOrientationRightMirrored:
- transform = CGAffineTransformTranslate(transform, image.size.height, 0);
- transform = CGAffineTransformScale(transform, -1, 1);
- break;
-
- default:
- break;
- }
-
- // Now we draw the underlying CGImage into a new context, applying the transform
- // calculated above.
- CGContextRef ctx = CGBitmapContextCreate(NULL, image.size.width, image.size.height,
- CGImageGetBitsPerComponent(image.CGImage), 0,
- CGImageGetColorSpace(image.CGImage),
- CGImageGetBitmapInfo(image.CGImage));
- CGContextConcatCTM(ctx, transform);
- switch (image.imageOrientation) {
- case UIImageOrientationLeft:
- case UIImageOrientationLeftMirrored:
- case UIImageOrientationRight:
- case UIImageOrientationRightMirrored:
- // Grr...
- CGContextDrawImage(ctx, CGRectMake(0, 0, image.size.height, image.size.width), image.CGImage);
- break;
-
- default:
- CGContextDrawImage(ctx, CGRectMake(0, 0, image.size.width, image.size.height), image.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
|