提高上传效率,iOS图片压缩总结

最近项目中用到七牛上传图片,多张上传时,png图片大,上传极慢,特地研究了一下图片压缩的方法。

两种压缩图片的方法:压缩图片质量(Quality),压缩图片尺寸(Size)



压缩图片质量

NSData *data = UIImageJPEGRepresentation(image, compression);

UIImage*resultImage = [UIImageimageWithData:data];

通过 UIImage 和 NSData 的相互转化,减小 JPEG 图片的质量来压缩图片。UIImageJPEGRepresentation:: 第二个参数 compression 取值 0.0~1.0,值越小表示图片质量越低,图片文件自然越小。




压缩图片尺寸

UIGraphicsBeginImageContext(size);

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

resultImage =UIGraphicsGetImageFromCurrentImageContext();UIGraphicsEndImageContext();

给定所需的图片尺寸 size,resultImage 即为原图 image 绘制为 size 大小的图片。





OK,现在说一下我的压缩思路。


第一步,先等比压缩图片尺寸。根据图片的宽高,过宽度>1000就压缩到1000。

if (image.size.width > 1000) {

        CGSize size = CGSizeMake(1000, 1000*image.size.height/image.size.width);

        UIGraphicsBeginImageContext(size);

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

        image = UIGraphicsGetImageFromCurrentImageContext();

        UIGraphicsEndImageContext();

    }

经过这一步,图片大小就压缩了一大半了。例如:我从手机随便上传的一张图片就有5M~6M,等比缩小后就只剩1M多点。



第二步,压缩图片的质量。

    data = UIImageJPEGRepresentation(image, 1.0);

    if (data.length > 100*1024) {

        if (data.length > 1024*1024) {

            //1M以及以上

            data = UIImageJPEGRepresentation(image, 0.5);

        }else if (data.length > 512*1024) {

            //0.5M-1M

            data = UIImageJPEGRepresentation(image, 0.6);

        }else if (data.length > 200*1024) {

            //0.25M-0.5M

            data = UIImageJPEGRepresentation(image, 0.7);

        }

    }


    if (UIImagePNGRepresentation(image) == nil) {

        typeName = @"jpg";

    }else{

        typeName = @"png";

    }


先用这个方法UIImageJPEGRepresentation将图片转成nsdata,然后根据data的length.





最后,如果你想判断不同图片的类型,可用下面的方法。

通过二进制判断图片的类型

+ (NSString *)typeForImageData:(NSData *)data {

uint8_t c;

[data getBytes:&c length:1];

switch (c) {

case 0xFF:

return @"image/jpeg";

case 0x89:

return @"image/png";

case 0x47:

return @"image/gif";

case 0x49:

case 0x4D:

return @"image/tiff";

}

return nil;

}






至此,图片压缩就完成了,谢谢~

你可能感兴趣的:(提高上传效率,iOS图片压缩总结)