iOS 压缩图片成二进制流上传服务器、从服务器请求下来的二进制流
2018-08-05 本文已影响0人
木子李55
iOS中两种压缩图片的方法:(将UIImage转化为NSData,可用来上传服务器)
// UIImagePNGRepresentation(UIImage);
// UIImageJPEGRepresentation(UIImage,CGFloat);
前者只有一个参数:图片的引用;后者有两个参数:图片的引用和压缩系数。
前者更耗时,图片数据量更大,如果对图片的质量要求不那么高的话,可以通过设置压缩系数减少数据量,而且从视图角度看,图片的质量并没有明显降低,因此我们优先使用后者。
1)图片大于1M的,将压缩系数调整到0.7
2)图片在0.5M<image<1M,将压缩系数调整到0.8
3)图片小于0.5M,压缩系数可以写0.9或者1
UIImage *uploadImage = [UIImage imageNamed:@"dog1.jpeg"];
NSData *imageData = UIImageJPEGRepresentation(uploadImage, 0.7);
NSLog(@"上传图片大小:%ldK", (long)(imageData.length/1024));
使用AFN上传图片(可以使用cocoapods导入AFNetworking这个第三方框架):
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
[manager POST:@"" parameters:@{} constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
// 上传图片,以文件流的格式,name是指服务器端的文件夹名字
[formData appendPartWithFileData:imageData name:@"imageFile" fileName:fileName mimeType:@"image/jpeg"];
} progress:^(NSProgress * _Nonnull uploadProgress) {
// uploadProgress代表进度
NSLog(@"uploadProgress == %f", uploadProgress.fractionCompleted);
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSLog(@"上传成功");
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"上传失败");
}];
从服务器请求下来的二进制流图片数据,可转化为UIImage展示出来:
UIImageView *photoImage = [[UIImageView alloc] initWithFrame:CGRectMake(20, 100, 200, 300)];
photoImage.backgroundColor = [UIColor yellowColor];
photoImage.image = [UIImage imageWithData:imageData];
[self.view addSubview:photoImage];
~~赠人玫瑰,手留余香;
~~日积跬步,久之千里。