方法一:
?
- (UIImage*)scaleFromImage:(UIImage*)image scaledToSize:(CGSize)newSize
{
?CGSize imageSize = image.size;
?CGFloat width = imageSize.width;
?CGFloat height = imageSize.height;
?????
?if (width ? return image;
?}
?????
?if (width == 0 || height == 0){
? return image;
?}
?????
?CGFloat widthFactor = newSize.width / width;
?CGFloat heightFactor = newSize.height / height;
?CGFloat scaleFactor = (widthFactor ?????
?CGFloat scaledWidth = width * scaleFactor;
?CGFloat scaledHeight = height * scaleFactor;
?CGSize targetSize = CGSizeMake(scaledWidth,scaledHeight);
?????
??? UIGraphicsBeginImageContext(targetSize);
??? [image drawInRect:CGRectMake(0,0,scaledWidth,scaledHeight)];
??? UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
??? UIGraphicsEndImageContext();
??? return newImage;
}
?
方法二:
.h具體code
#import ?
@interface UIImage (UIImageExt)?
- (UIImage *)scaleToSize:(UIImage *)img size:(CGSize)size;?
- (UIImage *)imageByScalingAndCroppingForSize:(CGSize)targetSize;?
@end?
?
.m具體code
?
#import "UIImageExt.h"?
@implementation UIImage (UIImageExt)?
- (UIImage *)scaleToSize:(UIImage *)img size:(CGSize)size{?
??? // 創建一個bitmap的context?
??? // 并把它設置成為當前正在使用的context?
??? UIGraphicsBeginImageContext(size);?
??? // 繪制改變大小的圖片?
??? [img drawInRect:CGRectMake(0, 0, size.width, size.height)];?
??? // 從當前context中創建一個改變大小后的圖片?
??? UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext();?
??? // 使當前的context出堆棧?
??? UIGraphicsEndImageContext();?
??? // 返回新的改變大小后的圖片?
??? return scaledImage;?
}?
- (UIImage*)imageByScalingAndCroppingForSize:(CGSize)targetSize?
{?
??? UIImage *sourceImage = self;?
??? UIImage *newImage = nil;?
??? CGSize imageSize = sourceImage.size;?
??? CGFloat width = imageSize.width;?
??? CGFloat height = imageSize.height;?
??? CGFloat targetWidth = targetSize.width;?
??? CGFloat targetHeight = targetSize.height;?
??? CGFloat scaleFactor = 0.0;?
??? CGFloat scaledWidth = targetWidth;?
??? CGFloat scaledHeight = targetHeight;?
??? CGPoint thumbnailPoint = CGPointMake(0.0,0.0);?
??? if (CGSizeEqualToSize(imageSize, targetSize) == NO)?
??? {?
??????? CGFloat widthFactor = targetWidth / width;?
??????? CGFloat heightFactor = targetHeight / height;?
??????? if (widthFactor > heightFactor)?
??????????? scaleFactor = widthFactor; // scale to fit height?
??????? else?
??????????? scaleFactor = heightFactor; // scale to fit width?
??????? scaledWidth? = width * scaleFactor;?
??????? scaledHeight = height * scaleFactor;?
??????? // center the image?
??????? if (widthFactor > heightFactor)?
??????? {?
??????????? thumbnailPoint.y = (targetHeight - scaledHeight) * 0.5;?
??????? }?
??????? else?
??????????? if (widthFactor ??????????? {?
??????????????? thumbnailPoint.x = (targetWidth - scaledWidth) * 0.5;?
??????????? }?
??? }?
??? UIGraphicsBeginImageContext(targetSize); // this will crop?
??? CGRect thumbnailRect = CGRectZero;?
??? thumbnailRect.origin = thumbnailPoint;?
??? thumbnailRect.size.width? = scaledWidth;?
??? thumbnailRect.size.height = scaledHeight;?
??? [sourceImage drawInRect:thumbnailRect];?
??? newImage = UIGraphicsGetImageFromCurrentImageContext();?
??? if(newImage == nil)?
??????? NSLog(@"could not scale image");?
??? //pop the context to get back to the default?
??? UIGraphicsEndImageContext();?
??? return newImage;?
}?
@end?
?
?
?
方法三:(本人項目中使用的方法)
?
-(UIImage *) imageCompressForWidth:(UIImage *)sourceImage targetWidth:(CGFloat)defineWidth
{
??? CGSize imageSize = sourceImage.size;
??? CGFloat width = imageSize.width;
??? CGFloat height = imageSize.height;
??? CGFloat targetWidth = defineWidth;
??? CGFloat targetHeight = (targetWidth / width) * height;
??? UIGraphicsBeginImageContext(CGSizeMake(targetWidth, targetHeight));
??? [sourceImage drawInRect:CGRectMake(0,0,targetWidth,? targetHeight)];
??? UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();
??? UIGraphicsEndImageContext();
??? return newImage;
}
?
?
?
以上所述就是IOS中將圖像進行壓縮的三種方法,希望大家能夠喜歡,更多內容請繼續關注武林技術頻道網站!