iOS OC 图片压缩
纯代码,不废话,欢迎copy使用,记得点赞
+(NSData *)imageData:(UIImage *)image maxSize:(int)maxSize{
// 设置最大文件大小(200KB)
NSLog(@"执行压缩方案 期望压缩目标%dk",maxSize);
return [self compressImage:image toMaxSize:maxSize];
}
// 主压缩方法:将图片压缩到指定大小(单位:KB)
+ (NSData *)compressImage:(UIImage *)image toMaxSize:(NSInteger)maxSize {
if (!image) return nil;
NSInteger maxSizeBytes = maxSize * 1024;
__block NSData *resultData = nil;
// 先尝试通过质量压缩
@autoreleasepool {
// 使用二分法查找最佳压缩质量
CGFloat low = 0.05;
CGFloat high = 1.0;
CGFloat quality = high;
NSData *currentData = nil;
// 精度控制在5%以内
while (high - low > 0.05) {
@autoreleasepool {
quality = (high + low) / 2;
currentData = UIImageJPEGRepresentation(image, quality);
if (!currentData) {
high = quality;
continue;
}
if (currentData.length > maxSizeBytes) {
high = quality; // 需要更低的质量
} else {
low = quality; // 可以尝试更高的质量
resultData = currentData; // 保存当前最佳结果
}
// 及时释放不再需要的数据
if (high - low <=