iOS 图片压缩 压缩到指定大小 质量和尺寸压缩

有时候一些功能需要上传规定大小的图片,所以我们要对图片进行压缩。

  • 思路:图片质量压缩 + 图片尺寸压缩首先对图片进行压缩,遍历压缩后当图片压缩到一定程度时,继续循环压缩会没有效果,那么可以把图片大小缩小一半(我这里是缩小0.5,可自行定义),然后继续执行压缩。

代码:

/**
 * 压缩图片使图片文件小于指定大小
 * @param maxLength  压缩最大长度
 */
- (NSData *)compressQualityWithMaxLength:(NSInteger)maxLength
{
    CGFloat compression = 1;
    NSData *data = UIImageJPEGRepresentation(self, compression);
    if (data.length < maxLength) return data;
    CGFloat max = 1;
    CGFloat min = 0;
    for (int i = 0; i < 6; ++i) {
        compression = (max + min) / 2;
        data = UIImageJPEGRepresentation(self, compression);
        if (data.length < maxLength * 0.9) {
            min = compression;
        } else if (data.length > maxLength) {
            max = compression;
        } else {
            break;
        }
    }
    
    if (data.length > maxLength) {
        UIImage *nImage = [self drawImageBySize:CGSizeMake(self.size.width*0.5, self.size.height*0.5)];
        data = [nImage compressQualityWithMaxLength:maxLength];
    }
    
    return data;
}


// 根据 aSize 返回一个新的image
- (UIImage *)drawImageBySize:(CGSize)aSize; {
    UIGraphicsBeginImageContext(aSize);
    [self drawInRect:CGRectMake(0, 0, aSize.width, aSize.height)];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    
    return newImage;
}

你可能感兴趣的:(iOS 图片压缩 压缩到指定大小 质量和尺寸压缩)