iOS图片压缩成指定大小

在iOS中涉及一些图片显示和处理问题,在实际中碰到过修改账户头像时上传头像出现 error = Error Domain=com.alamofire.error.serialization.response Code=-1011 “Request failed: not found (404)” UserInfo={com.alamofire.serialization.response.error.response= 问题, 但实际修改头像的接口和参数都是没有问题的,后来发现是因为上传的图片太大了,将图片转成NSDataBase64Encoding64CharacterLineLength格式,生成的字符流有七八页文档,打印输出字节长度有60~100+不等,也因服务器有限制,无法上传过大的,所以需要将图片进行压缩到指定大小,压缩方式可为

UIImageJPEGRepresentation(UIImage * __nonnull image, CGFloat compressionQuality);

具体如下:

-(NSString *)UIImageToBase64Str:(UIImage *) image maxDataLength:(CGFloat) len
{
    CGFloat quality = 0.5;
    NSData *data = UIImageJPEGRepresentation(image, quality);
    while ((data.length/1024) > len && quality > 0.01f) {
        quality = quality - 0.05;
        data = UIImageJPEGRepresentation(image, quality);
    }
    NSString *encodedImageStr = [data base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
    return encodedImageStr;
}

0.05为每次再压缩时图片质量减少的值,在实际中可根据需要进行相应更改。
返回的encodedImageStr为字符流,可用于直接上传到服务器的。
计算图片压缩后的大小:

dataLength = data.length/1024;

你可能感兴趣的:(iOS图片压缩成指定大小)