压缩图片


@interface UIImage (Compress)

- (UIImage *)compressedImage;

- (CGFloat)compressionQuality;

- (NSData *)compressedData;

- (NSData *)compressedData:(CGFloat)compressionQuality;

@end



#define MAX_IMAGEPIX 200.0 // max pix 200.0px
#define MAX_IMAGEDATA_LEN 50000.0 // max data length 5K

@implementation UIImage (Compress)

- (UIImage *)compressedImage {
CGSize imageSize = self.size;
CGFloat width = imageSize.width;
CGFloat height = imageSize.height;

if (width <= MAX_IMAGEPIX && height <= MAX_IMAGEPIX) {
// no need to compress.
return self;
}

if (width == 0 || height == 0) {
// void zero exception
return self;
}

UIImage *newImage = nil;
CGFloat widthFactor = MAX_IMAGEPIX / width;
CGFloat heightFactor = MAX_IMAGEPIX / height;
CGFloat scaleFactor = 0.0;

if (widthFactor > heightFactor)
scaleFactor = heightFactor; // scale to fit height
else
scaleFactor = widthFactor; // scale to fit width

CGFloat scaledWidth = width * scaleFactor;
CGFloat scaledHeight = height * scaleFactor;
CGSize targetSize = CGSizeMake(scaledWidth, scaledHeight);

UIGraphicsBeginImageContext(targetSize); // this will crop

CGRect thumbnailRect = CGRectZero;
thumbnailRect.size.width = scaledWidth;
thumbnailRect.size.height = scaledHeight;

[self drawInRect:thumbnailRect];

newImage = UIGraphicsGetImageFromCurrentImageContext();

//pop the context to get back to the default
UIGraphicsEndImageContext();

return newImage;

}

- (NSData *)compressedData:(CGFloat)compressionQuality {
assert(compressionQuality <= 1.0 && compressionQuality >= 0);

return UIImageJPEGRepresentation(self, compressionQuality);
}

- (CGFloat)compressionQuality {
NSData *data = UIImageJPEGRepresentation(self, 1.0);
NSUInteger dataLength = [data length];

if(dataLength > MAX_IMAGEDATA_LEN) {
return 1.0 - MAX_IMAGEDATA_LEN / dataLength;
} else {
return 1.0;
}
}

- (NSData *)compressedData {
CGFloat quality = [self compressionQuality];

return [self compressedData:quality];
}

@end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值