美文网首页
iOS 压缩图片成二进制流上传服务器、从服务器请求下来的二进制流

iOS 压缩图片成二进制流上传服务器、从服务器请求下来的二进制流

作者: 木子李55 | 来源:发表于2018-08-05 18:10 被阅读0次
     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];
    
    

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

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

    相关文章

      网友评论

          本文标题:iOS 压缩图片成二进制流上传服务器、从服务器请求下来的二进制流

          本文链接:https://www.haomeiwen.com/subject/gmnbvftx.html