美文网首页
提高上传效率,iOS图片压缩总结

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

作者: Anson杨春安 | 来源:发表于2017-12-29 10:26 被阅读172次

最近项目中用到七牛上传图片,多张上传时,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图片压缩总结

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

  • Vue上传图片压缩的问题

    上传图片太大,需要前台进行图片压缩上传图片大于100* 1024 的用canvas 来压缩来解决然后IOS拍照上传...

  • vue 图片压缩

    vue 图片压缩 上传图片大于100* 1024 的用canvas 来压缩来解决 然后IOS拍照上传会有图片旋转的...

  • vue 图片压缩

    vue 图片压缩 上传图片大于100* 1024 的用canvas来压缩来解决 然后IOS拍照上传会有图片旋转的问...

  • 2015-10-16图片压缩,MD5校验去重

    ios客户端上传图片的时候,如果图片过大,通常会压缩后上传, UIImageJPEGRepresentation(...

  • 阿里云(I)

    参考资料:iOS 阿里云服务器图片上传iOS录制(或选择)视频,压缩、上传(整理)视频 拍摄 与压缩 阿里云OSS...

  • iOS 图片压缩上传

    前段时间处理了下图片上传压缩的问题,在这里记录下。iPhone拍摄的照片2-3M可压缩至30-60KB左右,清晰度...

  • iOS图片压缩上传

    需求 很多时候我们上传图片经常遇到一些问题,要不就是图片质量变差,要不就是图片太大等等问题。这里,我找到了一个算是...

  • iOS 网络上传图片

    上传图片 构造参数(NSArray *)files 上传图片—压缩 压缩到小于(...

  • iPic for Mac(图床神器) v1.7.0中文免费版

    上传图片相关设置 上传前压缩图片 可以在 iPic 的 偏好设置 中开启「上传前压缩图片」选项,目前支持压缩的图片...

网友评论

      本文标题:提高上传效率,iOS图片压缩总结

      本文链接:https://www.haomeiwen.com/subject/sonkgxtx.html