国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

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

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

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

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

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

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

主要步驟:

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

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

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

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

1)封裝的上傳圖片的網絡請求(圖片壓縮) QTXUploadImage 文件

?
1
2
3
4
5
6
7
8
9
// 利用 afn 上傳一張圖片
#import <Foundation/Foundation.h>
 
@interface QTXUploadImage : NSObject
 
// 上傳圖片的網絡請求(圖片壓縮)
+ (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
 
/**
 * 上傳圖片的網絡請求(圖片壓縮)
 *
 * @param url       上傳圖片的網絡請求地址
 * @param name       和后臺包名一致
 *
 */
+ (void)post:(NSString *)url image:(UIImage *)image name:(NSString *)name success:(void (^)(id json))success failure:(void (^)(NSError *error))failure {
 
  // 1.創建網絡管理者
  AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
 
  // 2.拼接請求參數url 也可在具體控制器請求里傳入
  NSDictionary *dict = @{@"userId" : [QTXAccountTool account].userId};
 
  // 3.發送請求
  [manager POST:url parameters:dict constructingBodyWithBlock:
   ^void(id<AFMultipartFormData> formData) {
 
     NSData *imageData = UIImageJPEGRepresentation(image, 0.5);//進行圖片壓縮
 
     // 使用日期生成圖片名稱
     NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
     formatter.dateFormat = @"yyyyMMddHHmmss";
     NSString *fileName = [NSString stringWithFormat:@"%@.png",[formatter stringFromDate:[NSDate date]]];
     // 任意的二進制數據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]; // 修改相冊的導航條的背景顏色
    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

當使用時,在所需使用的控制器里調用:

?
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(@"學生證圖像上傳請求失敗 %@", error);
        }];
      }
    }];

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

插一下,我們產品沒讓拍照的照片存儲到相冊

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

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

延伸 · 閱讀

精彩推薦
  • IOSiOS中MD5加密算法的介紹和使用

    iOS中MD5加密算法的介紹和使用

    MD5加密是最常用的加密方法之一,是從一段字符串中通過相應特征生成一段32位的數字字母混合碼。對輸入信息生成唯一的128位散列值(32個字符)。這篇文...

    LYSNote5432021-02-04
  • IOSiOS開發之視圖切換

    iOS開發之視圖切換

    在iOS開發中視圖的切換是很頻繁的,獨立的視圖應用在實際開發過程中并不常見,除非你的應用足夠簡單。在iOS開發中常用的視圖切換有三種,今天我們將...

    執著丶執念5282021-01-16
  • IOSiOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和Masonry簡單使用)

    iOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和

    這篇文章主要介紹了iOS中滑動控制屏幕亮度和系統音量(附加AVAudioPlayer基本用法和Masonry簡單使用)的相關資料,需要的朋友可以參考下...

    CodingFire13652021-02-26
  • IOSiOS開發技巧之狀態欄字體顏色的設置方法

    iOS開發技巧之狀態欄字體顏色的設置方法

    有時候我們需要根據不同的背景修改狀態欄字體的顏色,下面這篇文章主要給大家介紹了關于iOS開發技巧之狀態欄字體顏色的設置方法,文中通過示例代碼...

    夢想家-mxj8922021-05-10
  • IOSiOS中UILabel實現長按復制功能實例代碼

    iOS中UILabel實現長按復制功能實例代碼

    在iOS開發過程中,有時候會用到UILabel展示的內容,那么就設計到點擊UILabel復制它上面展示的內容的功能,也就是Label長按復制功能,下面這篇文章主要給大...

    devilx12792021-04-02
  • IOS詳解iOS中多個網絡請求的同步問題總結

    詳解iOS中多個網絡請求的同步問題總結

    這篇文章主要介紹了詳解iOS中多個網絡請求的同步問題總結,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧...

    liang199111312021-03-15
  • IOSiOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果

    iOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果

    這篇文章主要介紹了iOS自定義UICollectionViewFlowLayout實現圖片瀏覽效果的相關資料,需要的朋友可以參考下...

    jiangamh8882021-01-11
  • IOSiOS實現控制屏幕常亮不變暗的方法示例

    iOS實現控制屏幕常亮不變暗的方法示例

    最近在工作中遇到了要將iOS屏幕保持常亮的需求,所以下面這篇文章主要給大家介紹了關于利用iOS如何實現控制屏幕常亮不變暗的方法,文中給出了詳細的...

    隨風13332021-04-02
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 一级特黄录像免费播放全99 | 欧美日韩在线不卡 | 久久一二区 | 黄在线看 | 国产98色在线 | 日韩 | 免费观看黄色大片 | 一级黄网站 | 日本三级中国三级99人妇网站 | 欧美综合一区二区三区 | 精品视频| 日韩欧美在线观看 | 欧美精品在线一区二区三区 | av在线第一页 | 一区二区三区国产在线 | 久久精品不卡 | 一区二区三区在线免费观看 | 精品国产久 | 亚洲二区在线观看 | 久久久天堂国产精品 | 成人免费黄色毛片 | 国产福利精品一区 | 91在线播放视频 | 亚洲精品久久久久国产 | 黄色片免费在线观看视频 | 黄工厂精品免费观看 | 黄色国产视频 | 精品无人乱码一区二区三区的优势 | 欧美伦理一区二区 | 欧美日韩亚洲高清 | 日韩成人在线播放 | 自拍第1页 | 黄色在线观看视频网站 | 日韩在线色| 欧美午夜精品久久久久久人妖 | 91视频免费观看 | 国产精品中文字幕在线 | 亚洲狠狠爱一区二区三区 | 亚洲精品免费在线观看 | 日韩一区二区不卡 | 国产精品视频导航 | 91av官网 |