国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > iOS > 正文

ios利用 AFN 上傳相冊(cè)或者拍照?qǐng)D片

2019-10-21 18:45:52
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

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

主要步驟:

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

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

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

廢話不多說(shuō),直接上代碼:

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

// 利用 afn 上傳一張圖片#import <Foundation/Foundation.h>@interface QTXUploadImage : NSObject// 上傳圖片的網(wǎng)絡(luò)請(qǐng)求(圖片壓縮)+ (void)post:(NSString *)url image:(UIImage *)image name:(NSString *)name success:(void (^)(id json))success failure:(void (^)(NSError *error))failure;@end
#import "QTXUploadImage.h"#import "ios/224333.html">AFNetworking.h"#import "QTXAccount.h"#import "QTXAccountTool.h"@implementation QTXUploadImage/** * 上傳圖片的網(wǎng)絡(luò)請(qǐng)求(圖片壓縮) * * @param url       上傳圖片的網(wǎng)絡(luò)請(qǐng)求地址 * @param name       和后臺(tái)包名一致 * */+ (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.拼接請(qǐng)求參數(shù)url 也可在具體控制器請(qǐng)求里傳入  NSDictionary *dict = @{@"userId" : [QTXAccountTool account].userId};  // 3.發(fā)送請(qǐng)求  [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)封裝的拍照/從相冊(cè)選擇 QTXImagePicker 文件

// 拍照/從相冊(cè)選擇#import <Foundation/Foundation.h>typedef void(^QTXImagePickerFinishAction)(UIImage *image);@interface QTXImagePicker : NSObject/** @param viewController 用于present UIImagePickerController對(duì)象 @param allowsEditing  是否允許用戶編輯圖像 */+ (void)showImagePickerFromViewController:(UIViewController *)viewController              allowsEditing:(BOOL)allowsEditing               finishAction:(QTXImagePickerFinishAction)finishAction;@end
#import "QTXImagePicker.h"@interface QTXImagePicker()<UIActionSheetDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate>@property (nonatomic, weak) UIViewController *viewController;@property (nonatomic, copy) QTXImagePickerFinishAction finishAction;@property (nonatomic, assign) BOOL allowsEditing;@endstatic 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:@"拍照", @"從相冊(cè)選擇", nil];  }else {    sheet = [[UIActionSheet alloc] initWithTitle:nil                      delegate:self                  cancelButtonTitle:@"取消"               destructiveButtonTitle:nil                  otherButtonTitles:@"從相冊(cè)選擇", 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:@"從相冊(cè)選擇"]) {    UIImagePickerController *picker = [[UIImagePickerController alloc] init];//    [picker.navigationBar setBarTintColor:QTXNavColor]; // 修改相冊(cè)的導(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)使用時(shí),在所需使用的控制器里調(diào)用:

[QTXImagePicker showImagePickerFromViewController:self allowsEditing:YES finishAction:^(UIImage *image) {      if (image) {        self.idSideImage = image;        [QTXUploadImage post:QTX_xsz1Url image:image name:@"xsz1" success:^(id json) {          // 第一步請(qǐng)求上傳          QTXLog(@"圖像上傳請(qǐng)求成功 %@", json);          self.idSide = json[@"data"];        } failure:^(NSError *error) {          QTXLog(@"學(xué)生證圖像上傳請(qǐng)求失敗 %@", error);        }];      }    }];

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

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

// 存儲(chǔ)圖片名稱:001.png ~ 009.pngfor (int i = 1; i<=9; i++) {   UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"00%d.png", i]];   UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil);   [NSThread sleepForTimeInterval:1];  }

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持VEVB武林網(wǎng)。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到IOS開(kāi)發(fā)頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 开阳县| 江门市| 应城市| 都匀市| 汉源县| 铜梁县| 绵阳市| 伊金霍洛旗| 易门县| 进贤县| 南丰县| 绍兴县| 尤溪县| 磐石市| 环江| 凤翔县| 五莲县| 新疆| 万宁市| 长宁区| 永仁县| 陵川县| 衡阳县| 台湾省| 二连浩特市| 韩城市| 泾源县| 山西省| 乌拉特后旗| 七台河市| 南部县| 临泽县| 阳东县| 新野县| 微山县| 都匀市| 巫溪县| 大英县| 咸宁市| 黑水县| 德阳市|