美文网首页
提高上传效率,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图片压缩总结

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