iOS图片压缩

开发中关于图片处理的地方非常常见,这里分享一下我在处理图片压缩的时候遇到的坑,

图片压缩的2种方法

第一:

NSData *data = UIImageJPEGRepresentation(image,0.5)

或者来压缩,这里返回的data是在原图片上去掉很多信息(alpha通道等),并且格式为jpeg,当操作 newImage = [UIImage imageWithData:data]; newImage的imageData回比的data的字节大,这里属于正常的;

第二:drawInRect ,重绘

/**

压缩上传图片

@param image 原图片

@param maxLength 需要上传的图片文件大小

@return data

*/

+(NSData *)imageCompressWith: (UIImage *)image maxLength: (CGFloat )maxLength{

    NSData *imageData = UIImageJPEGRepresentation(image, 1);

    if (imageData.length < maxLength) return imageData;

    CGFloat max = 1;

    CGFloat min = 0;

    UIImage *newImage = image;

    NSData * data;

    for (int i = 0; i < 6; i ++) {

        CGFloat compression = (max + min) * 0.5;

        data = UIImageJPEGRepresentation(newImage, compression);

        CGFloat length = data.length;

        if (length < maxLength * 0.9) {

            min = compression;

        }else if (length > maxLength) {

            max = compression;

        }else {

            break;

        }

    }

    if (data.length < maxLength) return data;

newImage = [UIImage imageWithData:data];

//    重绘

    for (int i = 1; i < 6; i ++) {

        int width = image.size.width * (1-i*0.1);

        int height = image.size.height * (1-i*0.1);

        CGSize size = CGSizeMake(width, height);

        UIGraphicsBeginImageContext(size);

        [newImage drawInRect:CGRectMake(0, 0, size.width, size.height)];

        newImage = UIGraphicsGetImageFromCurrentImageContext();

        UIGraphicsEndImageContext();

        data = UIImageJPEGRepresentation(newImage, 1);

        if (data.length < maxLength) {

            break;

        }

    }

    return data;

}

用户上传的图片可能乱七八糟,大小不一,我们采用一个固定的压缩参数去压缩图片总是会有问题

上面代码是我最终采用的方法,这里返回的NSData就可以拿来直接上传给咱们的服务器了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 两种图片压缩方法 两种压缩图片的方法:压缩图片质量(Quality),压缩图片尺寸(Size)。 压缩图片质量 N...
    喵喵嘟噜啡阅读 2,016评论 0 9
  • 提到从摄像头/相册获取图片是面向终端用户的,由用户去浏览并选择图片为程序使用。在这里,我们需要过UIImagePi...
    Ashoka_APP阅读 1,531评论 1 1
  • UIImageJPEGRepresntation UIImageJPEGRepresentation方法在耗时上比...
    旭日飞扬阅读 3,093评论 0 3
  • 最近需要用到图片压缩,本来苹果是有一个图片压缩的方法的,但是函数只能说不是很符合我们现在的需求,尤其是一张几M的图...
    Mr_ZH阅读 1,089评论 0 2
  • 概要: 图片的两种压缩方法1.1 压缩图片质量1.2 压缩图片尺寸压缩图片使图片文件小于指定大小2.1 压缩图片质...
    leonardni阅读 65,832评论 40 206