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

主要步骤:
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小时内与您取得联系。