欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

详解IOS开发中图片上传时两种图片压缩方式的比较

程序员文章站 2024-02-14 17:33:10
ios 图片上传时两种图片压缩方式的比较 上传图片不全面的想法:把图片保存到本地,然后把图片的路径上传到服务器,最后又由服务器把路径返回,这种方式不具有扩展性,如果用户换...

ios 图片上传时两种图片压缩方式的比较

上传图片不全面的想法:把图片保存到本地,然后把图片的路径上传到服务器,最后又由服务器把路径返回,这种方式不具有扩展性,如果用户换了手机,那么新手机的沙盒中就没有服务器返回的图片路径了,此时就无法获取之前已经上传了的头像了,在项目中明显的不可行。

上传图片的正确方式:上传头像到服务器一般是将图片nsdata上传到服务器,服务器返回一个图片nsstring地址,之后再将nsstring的路径转为url并通过url请求去更新用户头像(用户头像此时更新的便是nsstring)

代码为:

afhttprequestoperationmanager *manager = [afhttprequestoperationmanager manager];
 // 设置请求格式
 manager.requestserializer = [afjsonrequestserializer serializer];
 // 设置返回格式
 manager.responseserializer = [afjsonresponseserializer serializer];
[manager post:[nsstring stringwithformat:@"%@%@", xlimageserverhost, functionname] parameters:nil constructingbodywithblock:^(id<afmultipartformdata> formdata) {
/////传的图片数据放这里
 nsdata *eachimgdata = uiimagejpegrepresentation(image, 0.5);
 [formdata appendpartwithfiledata :eachimgdata name : @"upload" filename : @"picture.jpg" mimetype : @"image/jpeg" ];
 } success:^(afhttprequestoperation *operation, id responseobject) {
 ///请求成功
 } failure:^(afhttprequestoperation *operation, nserror *error) {
 ///请求失败
 }];

现在来介绍一下:uiimagejpegrepresntation 和 uiimagepngrepresontation的区别

在iphone上有两种读取图片数据的简单方法: uiimagejpegrepresentation和uiimagepngrepresentation. 

uiimagejpegrepresntation:

uiimagejpegrepresentation方法在耗时上比较少 而uiimagepngrepresentation耗时操作时间比较长

-(void)imagepickercontroller:(uiimagepickercontroller *)picker didfinishpickingmediawithinfo:(nsdictionary *)info

使用uiimagepngrepresentation取得照片时候可能会造成卡顿的现象

在iphone上有两种读取图片数据的简单方法: uiimagejpegrepresentation和uiimagepngrepresentation.

uiimagepngrepresontation:

uiimagejpegrepresentation函数需要两个参数:图片的引用和压缩系数.而uiimagepngrepresentation只需要图片引用作为参数.通过在实际使用过程中,比较发现: uiimagepngrepresentation(uiimage* image) 要比uiimagejpegrepresentation(uiimage* image, 1.0) 返回的图片数据量大很多.

譬如,同样是读取摄像头拍摄的同样景色的照片, uiimagepngrepresentation()返回的数据量大小为199k ,而 uiimagejpegrepresentation(uiimage* image, 1.0)返回的数据量大小只为140kb,比前者少了50多kb.如果对图片的清晰度要求不高,还可以通过设置 uiimagejpegrepresentation函数的第二个参数,大幅度降低图片数据量.

譬如,刚才拍摄的图片, 通过调用uiimagejpegrepresentation(uiimage* image, 1.0)读取数据时,返回的数据大小为140kb,但更改压缩系数后,通过调用uiimagejpegrepresentation(uiimage* image, 0.5)读取数据时,返回的数据大小只有11kb多,大大压缩了图片的数据量 ,而且从视角角度看,图片的质量并没有明显的降低.因此,在读取图片数据内容时,建议优先使用uiimagejpegrepresentation,并可根据自己的实际使用场景,设置压缩系数,进一步降低图片数据量大小.

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!