iOS 上传图片压缩处理

来源:互联网 发布:东华软件java笔试题 编辑:程序博客网 时间:2024/04/29 12:21

iOS图片压缩,想必这是一个比较大切值得深入的一个研究。所以太深入的这里我也不会去讲,之所以写这篇,是因为我们在开发中,因为iphone拍照后,直接上传的图片大多数像素比较高,尺寸比较大,一般都在2-3M,所以在手机上传,用户等待时间过于长,同时因为作为手机展示的产品图,也并不需要太高清晰的图片。所以产品要求控制图片在500KB以下。故我写了一个简单的算法以供大家参考。写这个算法前,公司的安卓同事,告诉我可以参看下安卓有一个现成的luban算法。于是我去搜索了一下,感觉过于麻烦。有兴趣的同学可以搜索一下,这里贴一个介绍的链接:http://blog.csdn.net/wenyiqingnianiii/article/details/52469342在这之前,我有搜到一篇简单的对微信图片压缩的博文:http://blog.csdn.net/u014220518/article/details/58136932这篇是已1280为界,来对图片进行尺寸的等比压缩的。但是他有一个2的系数,我不太明白这个是从何而来,所以,在我的简单算法中1280为界,但是没有用他的1这个系数。如果有研究的童鞋,可以告知这个2是什么。接下来,先对图片的压缩进行分解介绍。

1.图片压缩的概念理解

既然对图片压缩,那么从文字来分析:“压” 是指文件体积变小,但是像素数不变,长宽尺寸不变,那么质量可能下降。“缩” 是指文件的尺寸变小,也就是像素数减少,而长宽尺寸变小,文件体积同样会减小。所以,在写算法的时候也会将图片分解为这两部分来处理。

2.图片的压缩处理

2.1图片的缩处理

我这里首先用的是缩的处理。这里我将图片分为三种情况进行处理

1)宽高均大于1280,取较大值等于1280,较大值等比例压缩
2)宽或高一个大于1280,取较大的等于1280,较小的等比压缩
3)宽高均小于1280,压缩比例不变

对于缩的处理,图片是不会失真的,只是变小而已。

+(UIImage *)zipScaleWithImage:(UIImage *)sourceImage{    //进行图像尺寸的压缩    CGSize imageSize = sourceImage.size;//取出要压缩的image尺寸    CGFloat width = imageSize.width;    //图片宽度    CGFloat height = imageSize.height;  //图片高度    //1.宽高大于1280(宽高比不按照2来算,按照1来算)    if (width>1280||height>1280) {        if (width>height) {            CGFloat scale = height/width;            width = 1280;            height = width*scale;        }else{            CGFloat scale = width/height;            height = 1280;            width = height*scale;        }    //2.宽大于1280高小于1280    }else if(width>1280||height<1280){        CGFloat scale = height/width;        width = 1280;        height = width*scale;    //3.宽小于1280高大于1280    }else if(width<1280||height>1280){        CGFloat scale = width/height;        height = 1280;        width = height*scale;    //4.宽高都小于1280    }else{    }//进行尺寸重绘    UIGraphicsBeginImageContext(CGSizeMake(width, height));    [sourceImage drawInRect:CGRectMake(0,0,width,height)];    UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();    UIGraphicsEndImageContext();    return newImage;}

2.2图片的压处理

对于“压”的功能,使用的UIImageJPEGRepresentation或UIImagePNGRepresentation方法实现。
这里我也分了三种关于图片画质的压缩

1)图片大于1M的,将压缩系数调整到0.7
2)图片在0.5M<image<1M,将压缩系数调整到0.8
3)图片小雨0.5M,压缩系数可以写0.9或者1
+(NSData *)zipNSDataWithImage:(UIImage *)sourceImage{    //进行图像的画面质量压缩    NSData *data=UIImageJPEGRepresentation(sourceImage, 1.0);    if (data.length>100*1024) {        if (data.length>1024*1024) {//1M以及以上            data=UIImageJPEGRepresentation(newImage, 0.7);        }else if (data.length>512*1024) {//0.5M-1M            data=UIImageJPEGRepresentation(newImage, 0.8);        }else if (data.length>200*1024) {            //0.25M-0.5M            data=UIImageJPEGRepresentation(newImage, 0.9);        }    }    return data;}

两段结合起来

+(NSData *)zipNSDataWithImage:(UIImage *)sourceImage{    //进行图像尺寸的压缩    CGSize imageSize = sourceImage.size;//取出要压缩的image尺寸    CGFloat width = imageSize.width;    //图片宽度    CGFloat height = imageSize.height;  //图片高度    //1.宽高大于1280(宽高比不按照2来算,按照1来算)    if (width>1280) {        if (width>height) {            CGFloat scale = width/height;            height = 1280;            width = height*scale;        }else{            CGFloat scale = height/width;            width = 1280;            height = width*scale;        }    //2.高度大于1280    }else if(height>1280){        CGFloat scale = height/width;        width = 1280;        height = width*scale;    }else{    }    UIGraphicsBeginImageContext(CGSizeMake(width, height));    [sourceImage drawInRect:CGRectMake(0,0,width,height)];    UIImage* newImage = UIGraphicsGetImageFromCurrentImageContext();    UIGraphicsEndImageContext();        //进行图像的画面质量压缩    NSData *data=UIImageJPEGRepresentation(newImage, 1.0);    if (data.length>100*1024) {        if (data.length>1024*1024) {//1M以及以上            data=UIImageJPEGRepresentation(newImage, 0.7);        }else if (data.length>512*1024) {//0.5M-1M            data=UIImageJPEGRepresentation(newImage, 0.8);        }else if (data.length>200*1024) {            //0.25M-0.5M            data=UIImageJPEGRepresentation(newImage, 0.9);        }    }    return data;}

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 二手活飞 死飞活飞是什么 死飞如何改活飞 活飞轮子 死飞和活飞哪个安全 死飞可以改活飞吗 活飞自行车配色 活飞轮胎 活飞后刹 活飞装刹车 活飞变速自行车 活飞和死飞区别 死飞和活飞的区别 什么地飞 活飞和死飞的区别 活飞自行车好骑吗 爆炒活鸡 活鸡包装盒 活鸡批发 大妈带活鸡进地铁 乌鸡图片活鸡图 今日活鸡价格 活鸡批发价格 齐活 洼组词 洼田正孝水川麻美结婚 洼怎么读 坑坑洼洼近义词 洼乱转校生txt下载 坑坑洼洼反义词 洼乱转校生txt 指甲坑坑洼洼 洼田饮水试验 洼拼音 洼田饮水 洼的拼音 坑坑洼洼 坑坑洼洼拼音 洼的组词 洼组词语