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];

~~赠人玫瑰,手留余香;

~~日积跬步,久之千里。

上一篇下一篇

猜你喜欢

热点阅读