详解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,并可根据自己的实际使用场景,设置压缩系数,进一步降低图片数据量大小.
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!