一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - IOS - ios利用 AFN 上傳相冊或者拍照圖片

ios利用 AFN 上傳相冊或者拍照圖片

2021-03-19 15:37smile麗語 IOS

這篇文章主要介紹了ios利用 AFN 上傳相冊或者拍照圖片的相關(guān)資料,非常具有實用價值,需要的朋友可以參考下

由于項目中多處需要上傳圖片,我們可以自定義上傳圖片請求,自定義調(diào)取相冊及拍照,方便多處使用時調(diào)用。

主要步驟:

1.第一步:請求上傳你選取的相冊圖片或者拍照圖片(經(jīng)過壓縮處理)

2.第二步:獲取到第一步圖片url上傳給服務(wù)器

3.第三步:回顯圖片(當(dāng)然進(jìn)入該界面時先判斷是否有圖片,無圖則展示占位圖片,否則就回顯圖片)

廢話不多說,直接上代碼:

1)封裝的上傳圖片的網(wǎng)絡(luò)請求(圖片壓縮) QTXUploadImage 文件

?
1
2
3
4
5
6
7
8
9
// 利用 afn 上傳一張圖片
#import <Foundation/Foundation.h>
 
@interface QTXUploadImage : NSObject
 
// 上傳圖片的網(wǎng)絡(luò)請求(圖片壓縮)
+ (void)post:(NSString *)url image:(UIImage *)image name:(NSString *)name success:(void (^)(id json))success failure:(void (^)(NSError *error))failure;
 
@end
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#import "QTXUploadImage.h"
#import "AFNetworking.h"
#import "QTXAccount.h"
#import "QTXAccountTool.h"
 
@implementation QTXUploadImage
 
/**
 * 上傳圖片的網(wǎng)絡(luò)請求(圖片壓縮)
 *
 * @param url       上傳圖片的網(wǎng)絡(luò)請求地址
 * @param name       和后臺包名一致
 *
 */
+ (void)post:(NSString *)url image:(UIImage *)image name:(NSString *)name success:(void (^)(id json))success failure:(void (^)(NSError *error))failure {
 
  // 1.創(chuàng)建網(wǎng)絡(luò)管理者
  AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
 
  // 2.拼接請求參數(shù)url 也可在具體控制器請求里傳入
  NSDictionary *dict = @{@"userId" : [QTXAccountTool account].userId};
 
  // 3.發(fā)送請求
  [manager POST:url parameters:dict constructingBodyWithBlock:
   ^void(id<AFMultipartFormData> formData) {
 
     NSData *imageData = UIImageJPEGRepresentation(image, 0.5);//進(jìn)行圖片壓縮
 
     // 使用日期生成圖片名稱
     NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
     formatter.dateFormat = @"yyyyMMddHHmmss";
     NSString *fileName = [NSString stringWithFormat:@"%@.png",[formatter stringFromDate:[NSDate date]]];
     // 任意的二進(jìn)制數(shù)據(jù)MIMEType application/octet-stream
     [formData appendPartWithFileData:imageData name:name fileName:fileName mimeType:@"image/png"];
 
   } success:^void(NSURLSessionDataTask * task, id responseObject) {
 
     if (success) {
       success(responseObject);
     }
 
   } failure:^void(NSURLSessionDataTask * task, NSError * error) {
 
     if (failure) {
       failure(error);
     }
   }];
}
@end

2)封裝的拍照/從相冊選擇 QTXImagePicker 文件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 拍照/從相冊選擇
#import <Foundation/Foundation.h>
 
typedef void(^QTXImagePickerFinishAction)(UIImage *image);
 
@interface QTXImagePicker : NSObject
 
/**
 @param viewController 用于present UIImagePickerController對象
 @param allowsEditing  是否允許用戶編輯圖像
 */
+ (void)showImagePickerFromViewController:(UIViewController *)viewController
              allowsEditing:(BOOL)allowsEditing
               finishAction:(QTXImagePickerFinishAction)finishAction;
 
 
@end
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#import "QTXImagePicker.h"
 
@interface QTXImagePicker()<UIActionSheetDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate>
 
@property (nonatomic, weak) UIViewController *viewController;
@property (nonatomic, copy) QTXImagePickerFinishAction finishAction;
@property (nonatomic, assign) BOOL allowsEditing;
 
@end
 
static QTXImagePicker *qtxImagePickerInstance = nil;
 
@implementation QTXImagePicker
 
+ (void)showImagePickerFromViewController:(UIViewController *)viewController allowsEditing:(BOOL)allowsEditing finishAction:(QTXImagePickerFinishAction)finishAction {
  if (qtxImagePickerInstance == nil) {
    qtxImagePickerInstance = [[QTXImagePicker alloc] init];
  }
 
  [qtxImagePickerInstance showImagePickerFromViewController:viewController
                        allowsEditing:allowsEditing
                        finishAction:finishAction];
}
 
- (void)showImagePickerFromViewController:(UIViewController *)viewController
              allowsEditing:(BOOL)allowsEditing
               finishAction:(QTXImagePickerFinishAction)finishAction {
  _viewController = viewController;
  _finishAction = finishAction;
  _allowsEditing = allowsEditing;
 
  UIActionSheet *sheet = nil;
 
  if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
    sheet = [[UIActionSheet alloc] initWithTitle:nil
                      delegate:self
                  cancelButtonTitle:@"取消"
               destructiveButtonTitle:nil
                  otherButtonTitles:@"拍照", @"從相冊選擇", nil];
  }else {
    sheet = [[UIActionSheet alloc] initWithTitle:nil
                      delegate:self
                  cancelButtonTitle:@"取消"
               destructiveButtonTitle:nil
                  otherButtonTitles:@"從相冊選擇", nil];
  }
 
  UIView *window = [UIApplication sharedApplication].keyWindow;
  [sheet showInView:window];
}
 
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
  NSString *title = [actionSheet buttonTitleAtIndex:buttonIndex];
  if ([title isEqualToString:@"拍照"]) {
    UIImagePickerController *picker = [[UIImagePickerController alloc] init];
    picker.delegate = self;
    picker.sourceType = UIImagePickerControllerSourceTypeCamera;
    picker.allowsEditing = _allowsEditing;
    [_viewController presentViewController:picker animated:YES completion:nil];
 
  }else if ([title isEqualToString:@"從相冊選擇"]) {
    UIImagePickerController *picker = [[UIImagePickerController alloc] init];
//    [picker.navigationBar setBarTintColor:QTXNavColor]; // 修改相冊的導(dǎo)航條的背景顏色
    picker.delegate = self;
    picker.allowsEditing = YES;
    picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    [_viewController presentViewController:picker animated:YES completion:nil];
 
  }else {
    qtxImagePickerInstance = nil;
  }
}
 
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
  UIImage *image = info[UIImagePickerControllerEditedImage];
  if (image == nil) {
    image = info[UIImagePickerControllerOriginalImage];
  }
 
  if (_finishAction) {
    _finishAction(image);
  }
 
  [picker dismissViewControllerAnimated:YES completion:^{}];
 
  qtxImagePickerInstance = nil;
}
 
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
  if (_finishAction) {
    _finishAction(nil);
  }
 
  [picker dismissViewControllerAnimated:YES completion:^{}];
 
  qtxImagePickerInstance = nil;
}
 
@end

當(dāng)使用時,在所需使用的控制器里調(diào)用:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[QTXImagePicker showImagePickerFromViewController:self allowsEditing:YES finishAction:^(UIImage *image) {
      if (image) {
 
        self.idSideImage = image;
        [QTXUploadImage post:QTX_xsz1Url image:image name:@"xsz1" success:^(id json) {
          // 第一步請求上傳
          QTXLog(@"圖像上傳請求成功 %@", json);
 
          self.idSide = json[@"data"];
 
        } failure:^(NSError *error) {
          QTXLog(@"學(xué)生證圖像上傳請求失敗 %@", error);
        }];
      }
    }];

第二步和第三步 需要和各位自己后臺server聯(lián)調(diào),就屬于普通的get/post請求了,這邊就不放代碼了喲

插一下,我們產(chǎn)品沒讓拍照的照片存儲到相冊

?
1
2
3
4
5
6
7
8
9
// 存儲圖片名稱:001.png ~ 009.png
 
for (int i = 1; i<=9; i++) {
   UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"00%d.png", i]];
 
   UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);
 
   [NSThread sleepForTimeInterval:1];
  }

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

原文鏈接:http://www.jianshu.com/p/990d3e60c1e9?utm_source=tuicool&utm_medium=referral

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 猫扑俩性 | 日本女人www | 青青91| 黄德维| 狠狠色成人综合网图片区 | 国产欧美久久久精品影院 | a级片在线播放 | 无码任你躁久久久久久久 | 精品国产区一区二区三区在线观看 | 无码人妻99久久密AV | 欧美调教打屁股spank视频 | 日韩伦理在线观看 | 三年片韩国在线 | 国产经典一区 | 日本高清全集免费观看 | 国产综合第一页 | 欧美亚洲国产精品久久第一页 | 国产毛片在线高清视频 | 青青草国产青春综合久久 | 男人的天堂欧美 | 欧美肥胖老妇做爰变态 | 双性受合不垅腿攻np | 精品午夜久久福利大片免费 | 国内精品自产拍在线观看91 | 亚洲国产精品久久丫 | 免费高清视频在线观看 | 国产一区二区在线看 | 天天干天天色综合 | 秋霞717理论片在线观看 | 免费看黄色片网站 | 午夜私人福利影院 | 久草热在线 | 四虎麻豆国产精品 | 亚洲天堂视频在线观看免费 | 美女岳肉太深了使劲 | 91嫩草国产在线观看免费 | 99热在这里只有精品 | 国产短视频精品一区二区三区 | 亚洲国产一区二区三区青草影视 | 国产亚洲女人久久久久久 | julianann办公室 |