全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

ios利用 AFN 上传相册或者拍照图片

由于项目中多处需要上传图片,我们可以自定义上传图片请求,自定义调取相册及拍照,方便多处使用时调用。

主要步骤:

1.第一步:请求上传你选取的相册图片或者拍照图片(经过压缩处理)

2.第二步:获取到第一步图片url上传给服务器

3.第三步:回显图片(当然进入该界面时先判断是否有图片,无图则展示占位图片,否则就回显图片)

废话不多说,直接上代码:

1)封装的上传图片的网络请求(图片压缩) QTXUploadImage 文件

// 利用 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

#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 文件

// 拍照/从相册选择
#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
#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

当使用时,在所需使用的控制器里调用:

[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请求了,这边就不放代码了哟

插一下,我们产品没让拍照的照片存储到相册

// 存储图片名称: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];
  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# ios  # AFN  # 上传相册  # 相册选择图片上传  # 相册图片上传  # iOS框架AVFoundation实现相机拍照、录制视频  # iOS仿微信相机拍照、视频录制功能  # IOS UIImagePickerController从拍照、图库、相册获取图片  # JS解决IOS中拍照图片预览旋转90度BUG的问题  # Android 实现IOS选择拍照相册底部弹出的实例  # iOS拍照后图片自动旋转90度的完美解决方法  # 详解利用exif.js解决ios手机上传竖拍照片旋转90度问题  # iOS视频录制(或选择)压缩及上传功能(整理)  # iOS自定义相机实现拍照、录制视频  # 上传图片  # 上传  # 自定义  # 第二步  # 多处  # 第三步  # 所需  # 我们可以  # 可在  # 学生证  # 不放  # 多说  # 无图  # 到第  # 大家多多  # 就回  # 判断是否  # 导航条  # 二进制数  # 器里 


相关文章: 广州营销型建站服务商推荐:技术优势与SEO优化解析  网站建设制作、微信公众号,公明人民医院怎么在网上预约?  网站制作软件有哪些,制图软件有哪些?  北京营销型网站制作公司,可以用python做一个营销推广网站吗?  c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】  如何在阿里云高效完成企业建站全流程?  如何快速上传自定义模板至建站之星?  建站之星ASP如何实现CMS高效搭建与安全管理?  昆明网站制作哪家好,昆明公租房申请网上登录入口?  如何选择香港主机高效搭建外贸独立站?  如何在阿里云完成域名注册与建站?  如何快速生成可下载的建站源码工具?  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  陕西网站制作公司有哪些,陕西凌云电器有限公司官网?  电影网站制作价格表,那些提供免费电影的网站,他们是怎么盈利的?  python的本地网站制作,如何创建本地站点?  网站设计制作企业有哪些,抖音官网主页怎么设置?  兔展官网 在线制作,怎样制作微信请帖?  宝塔面板如何快速创建新站点?  相册网站制作软件,图片上的网址怎么复制?  建站之星如何实现网站加密操作?  如何在服务器上配置二级域名建站?  建站之星好吗?新手能否轻松上手建站?  建站之星伪静态规则如何正确配置?  在线教育网站制作平台,山西立德教育官网?  网站代码制作软件有哪些,如何生成自己网站的代码?  建站之星安全性能如何?防护体系能否抵御黑客入侵?  建站之星如何助力企业快速打造五合一网站?  nginx修改上传文件大小限制的方法  如何配置支付宝与微信支付功能?  深圳网站制作案例,网页的相关名词有哪些?  小建面朝正北,A点实际方位是否存在偏差?  如何在腾讯云免费申请建站?  已有域名和空间如何快速搭建网站?  如何通过虚拟机搭建网站?详细步骤解析  C#如何序列化对象为XML XmlSerializer用法  南宁网站建设制作定制,南宁网站建设可以定制吗?  如何通过西部数码建站助手快速创建专业网站?  如何使用Golang table-driven基准测试_多组数据测量函数效率  如何获取PHP WAP自助建站系统源码?  C++中引用和指针有什么区别?(代码说明)  如何撰写建站申请书?关键要点有哪些?  C++如何将C风格字符串(char*)转换为std::string?(代码示例)  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  济南企业网站制作公司,济南社保单位网上缴费步骤?  定制建站模板如何实现SEO优化与智能系统配置?18字教程  浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?  建站之星代理费用多少?最新价格详情介绍  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  建站之家VIP精选网站模板与SEO优化教程整合指南 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。