利用AFN封裝上傳多張圖片方法,并壓縮圖片體積
+ (void)CommentPicWithDic:(NSDictionary *)dic//上傳圖片時可能有的附加條件如userid;
withImages:(NSDictionary *)imageDic//存圖片的字典
success:(void (^)(NSDictionary *))success
faile:(void (^)(NSError *))faile
{
NSString *urlStr = @"上傳到的地址";
AFHTTPRequestOperationManager *Manager = [AFHTTPRequestOperationManager manager];
Manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];
[afManager POST:urlStr parameters:dic constructingBodyWithBlock:^(id<AFMultipartFormData> formData){
for (id key in imageDic) {
UIImage *image = [imageDic objectForKey:key];
//FileData:圖片壓縮后的data類型
//name: 后臺規(guī)定的key
//fileName:自己給文件起名
//mimeType :圖片類型
[formData appendPartWithFileData:UIImagePNGRepresentation(image) name:[NSString stringWithFormat:@"%@",key] fileName:[NSString stringWithFormat:@"%@.png",key] mimeType:@"image/png"];
}
}success:^(AFHTTPRequestOperation *operation, id responseObject){
success(responseObject);
}failure:^(AFHTTPRequestOperation *operation, NSError *error){
faile(error);
}];
}
if (imgsAry.count != 0){//存圖片的數(shù)組
for (int j = 0; j < imgsAry.count; j++) {
UIImage * img = imgsAry[j];
NSData *imgData = UIImagePNGRepresentation(img);//亞索體積
if (imgData.length > 1024000) {//圖片不大于1M
CGSize imgSize = CGSizeMake(img.size.width / 2, img.size.height / 2);
img = [self OriginImage:img scaleToSize:imgSize];//亞索圖片尺寸
}
[imgDic setObject:img forKey:[NSString stringWithFormat:@"aaa%d",j + 1]];//后臺讓你傳的圖片對應的key
}
//方法使用
[APIManager CommentPicWithDic:imgInfoDic withImages:imgDic success:^(NSDictionary *info) {
NSLog(@"%@",info);
} faile:^(NSError *error) {
NSLog(@"0000%@",error);
}];
//圖片處理亚隅,圖片壓縮
- (UIImage*)OriginImage:(UIImage *)image scaleToSize:(CGSize)size {
UIGraphicsBeginImageContext(size); //你所需要的圖片尺寸
[image drawInRect:CGRectMake(0, 0, size.width, size.height)];
UIImage* scaledImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return scaledImage; //返回已變圖片
}
對您有用的話,可否關(guān)注下本人?以此激勵我和您的共同提高,謝謝了.
12.5
對于太大的圖片還是有缺陷,求大神給建議
3.2
自問自答.想起來了更新下備忘
//傳圖片
- (void)PostImgWithDic:(NSDictionary *)dic
withImg:(NSDictionary *)imgDic
url:(NSString *)url
successBlock:(SuccessBlock)successBlock
failureBlock:(FailureBlock)failureBlock
{
// AFHTTPSessionManager *manager = [self baseHtppRequest];
AFHTTPSessionManager *postAvatarManager = [AFHTTPSessionManager manager];
postAvatarManager.responseSerializer= [AFHTTPResponseSerializer serializer];
[postAvatarManager POST:url parameters:dic constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
if (imgDic.allKeys.count == 0) {
NSLog(@"沒有圖片上傳");
}else
{
for (id key in imgDic) {
UIImage *image = [imgDic objectForKey:key];
NSData *data = [[NSData alloc] init];
data = UIImageJPEGRepresentation(image, 1.0);
CGFloat count = 100;
DLog(@"圖片大小%ld",data.length);
while (data.length > 1024000) {
count--;
data = UIImageJPEGRepresentation(image, count / 100);
DLog(@"變化圖片大小%ld,%f",data.length,count / 100);
}
[formData appendPartWithFileData: data name:[NSString stringWithFormat:@"%@",key] fileName:[NSString stringWithFormat:@"%@.jpeg",key] mimeType:@"image/jpeg"];//Type:@"image/jpeg"fileName:[NSString stringWithFormat:@"%@.png"
}
}
} progress:^(NSProgress * _Nonnull uploadProgress) {
nil;
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
// NSLog(@"上傳圖片成功了AFN ");
DLog(@"上傳圖片成功了AFN ");
successBlock(responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSString *errorStr = [error.userInfo objectForKey:@"NSLocalizedDescription"];
// NSLog(@"上傳圖片失敗了了AFN ");
DLog(@"上傳圖片失敗了了AFN ");
failureBlock(errorStr);
}];
}