1:首先几个必须得返回值

//相机是否可用
- (BOOL) isCameraAvailable{return [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera];
}
//后置相机是否可用
- (BOOL) isRearCameraAvailable{return [UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceRear];
}
//前置相机是否可用
- (BOOL) isFrontCameraAvailable {return [UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceFront];
}//是否支持相册
- (BOOL) isPhotoLibraryAvailable{return [UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypePhotoLibrary];
}//是否支持相机
- (BOOL) doesCameraSupportTakingPhotos {return [self cameraSupportsMedia:(__bridge NSString *)kUTTypeImage sourceType:UIImagePickerControllerSourceTypeCamera];
}
//相册获取视频
- (BOOL) canUserPickVideosFromPhotoLibrary{return [selfcameraSupportsMedia:(__bridge NSString *)kUTTypeMovie sourceType:UIImagePickerControllerSourceTypePhotoLibrary];
}
//相册获取图片
- (BOOL) canUserPickPhotosFromPhotoLibrary{return [selfcameraSupportsMedia:(__bridge NSString *)kUTTypeImage sourceType:UIImagePickerControllerSourceTypePhotoLibrary];
}//返回所需要的媒体类型是否被支持
- (BOOL) cameraSupportsMedia:(NSString *)paramMediaType sourceType:(UIImagePickerControllerSourceType)paramSourceType{__block BOOL result = NO;if ([paramMediaType length] == 0) {return NO;}//获得相机模式下支持的媒体类型NSArray *availableMediaTypes = [UIImagePickerController availableMediaTypesForSourceType:paramSourceType];//如果支持的媒体类型中有需要就返回YES[availableMediaTypes enumerateObjectsUsingBlock: ^(id obj, NSUInteger idx, BOOL *stop) {NSString *mediaType = (NSString *)obj;if ([mediaType isEqualToString:paramMediaType]){result = YES;*stop= YES;}}];return result;
}

注释 : 检查媒体来源调用UIImagePickerController类的静态方isSourceTypeAvailable来检查

sourceType是一个UIImagePickerControllerSourceType类型的枚举值,它表示图像选取控制器的3种不同的媒体来源模式:

1>: UIImagePickerControllerSourceTypePhotoLibrary:照片库模式。图像选取控制器以该模式显示时会浏览系统照片库的根目录。
2>: UIImagePickerControllerSourceTypeCamera:相机模式,图像选取控制器以该模式显示时可以进行拍照或摄像。
3>: UIImagePickerControllerSourceTypeSavedPhotosAlbum:相机胶卷模式,图像选取控制器以该模式显示时会浏览相机胶卷目录。

2 : 使用相机拍图

// 拍照if ([self isCameraAvailable] && [self doesCameraSupportTakingPhotos]) {UIImagePickerController *controller = [[UIImagePickerController alloc] init];controller.sourceType = UIImagePickerControllerSourceTypeCamera;if ([self isFrontCameraAvailable]) {controller.cameraDevice = UIImagePickerControllerCameraDeviceFront;}NSMutableArray *mediaTypes = [[NSMutableArray alloc] init];[mediaTypes addObject:(__bridge NSString *)kUTTypeImage];controller.mediaTypes = mediaTypes;controller.delegate = self;[self presentViewController:controlleranimated:YEScompletion:^(void){NSLog(@"Picker View Controller is presented");}];}else{Show_AlterView(NSLocalizedString(@"不支持相机", nil));}

3 : 相册选取

if ([self isPhotoLibraryAvailable]) {UIImagePickerController *controller = [[UIImagePickerController alloc] init];controller.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;NSMutableArray *mediaTypes = [[NSMutableArray alloc] init];[mediaTypes addObject:(__bridge NSString *)kUTTypeImage];controller.mediaTypes = mediaTypes;controller.delegate = self;[self presentViewController:controlleranimated:YEScompletion:^(void){NSLog(@"Picker View Controller is presented");}];}}else{
Show_AlterView(NSLocalizedString(@"不支持系统相册", nil));}

4 : 实现相册代理

包含第三方类 : VPImageCropperViewController

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {[picker dismissViewControllerAnimated:YES completion:^() {UIImage *portraitImg = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
//        portraitImg = [self imageByScalingToMaxSize:portraitImg];// 裁剪 另外一个类库做裁剪  3.0是图片能放大的倍数VPImageCropperViewController *imgEditorVC = [[VPImageCropperViewController alloc] initWithImage:portraitImg cropFrame:CGRectMake(0, 100.0f, self.view.frame.size.width, self.view.frame.size.width) limitScaleRatio:3.0];imgEditorVC.delegate = self;[self presentViewController:imgEditorVC animated:YES completion:^{// TO DO}];}];
}- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {[picker dismissViewControllerAnimated:YES completion:^(){}];
}//实现三方代理 直接返回界面即可
#pragma mark VPImageCropperDelegate
- (void)imageCropper:(VPImageCropperViewController *)cropperViewController didFinished:(UIImage *)editedImage {//处理获取的结果图,设为头像啊,生成二维码啊 什么的editedImage[cropperViewController dismissViewControllerAnimated:YES completion:^{// TO DO}];
}- (void)imageCropperDidCancel:(VPImageCropperViewController *)cropperViewController {[cropperViewController dismissViewControllerAnimated:YES completion:^{}];
}

接下来就是post上传到服务器了

//先将图片转换成二进制数据流NSData* imageData = UIImagePNGRepresentation(editedImage);
//设置接收响应类型为标准HTTP类型(默认为响应类型为JSON)AFHTTPRequestOperationManager * manager = [AFHTTPRequestOperationManager manager];//    manager.responseSerializer = [AFHTTPResponseSerializer serializer];得到的responseObject还是二进制可用字符串接受//NSString *headerImageUrl = [[NSString alloc]initWithData:responseObject encoding:NSUTF8StringEncoding];manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/html",nil];AFHTTPRequestOperation  * o2= [manager POST:上传的url parameters:上传的参数字典param                                 constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {//将得到的二进制图片拼接到表单中 /** data,指定上传的二进制流;name,服务器端所需参数名;fileName,指定文件名;mimeType,指定文件格式 */[formData appendPartWithFileData:data name:@"file"fileName:@"icon.png"mimeType:@"image/png"];//多用途互联网邮件扩展(MIME,Multipurpose Internet Mail Extensions)}success:^(AFHTTPRequestOperation *operation,id responseObject){NSDictionary *dic = (NSDictionary *)responseObject;//返回得到的字典    }failure:^(AFHTTPRequestOperation *operation,NSError *error) {AnyLog(@"下载图片失败");}];//上传操作进度[o2 setUploadProgressBlock:^(NSUInteger bytesWritten,long long totalBytesWritten, long long totalBytesExpectedToWrite) {}];
//    UIProgressView * progressV2 = [[UIProgressViewalloc]initWithProgressViewStyle:UIProgressViewStyleDefault];
//
//    [progressV2 setProgressWithUploadProgressOfOperation:o2animated:YES];
//
//    [progressV2 setFrame:CGRectMake(0,130, 320, 30)];
//
//    [self.view addSubview:progressV2];

iOS 上传头像 裁剪相关推荐

  1. photoclip 图片旋转_PhotoClip移动端、pc端上传头像裁剪

    photoClip是一款支持移动设备触摸手势的图片裁剪jQuery插件. 一般引入 html部分 + 使用 'options' => ["enctype" => &qu ...

  2. element中el-upload和vue-cropper结合实现上传头像裁剪大小

    通过这两个插件很容易就能实现裁剪图片的功能,但其中有一个难点就是,裁剪后的图片要上传到服务器,(依然使用原先的el-upload上传图片的接口) 我们知道,el-upload上传图片的接口需要一个fi ...

  3. 上传头像裁剪vue3(vue-cropper)配合element的upload

    实现效果如下: 一.安装 npm install vue-cropper --save 二.在main.js中引入 import VueCropper from 'vue-cropper'; impo ...

  4. iOS上传头像, 相册权限,相册权限,拍照上传,相册选择图片,拍照页面语言设置,保存到相册...

    2019独角兽企业重金招聘Python工程师标准>>> 1. 权限 在打开相机拍照或者打开相册选择图片之前, 有必要先判断先是否有权限, 如果没有权限应该给个提示, 让用户自己去设置 ...

  5. 上传头像裁剪 android,android 调用系统裁剪框 裁剪头像

    [实例简介] [实例截图] [核心代码] package me.khrystal.activities; import android.content.Intent; import android.g ...

  6. 手机端-上传头像并裁剪

    <headrunat="server"><metahttp-equiv="Content-Type"content="text/ht ...

  7. 【小程序开发原创】小程序裁剪图片上传头像,二维码源码

    微信小程序 图片裁剪工具,简单易用 项目需求 在做微信小程序的时候有个图片上传之前裁剪的需求,找过一些github中的项目,都不太理想,主要是没有办法自定义宽高,于是自己研究了一下,做了一个简单的图片 ...

  8. php 图片上载 wordpress,WordPress 使用 Jcorp上传并裁剪图片作为自定义头像 —— PHP 后台部分...

    在开发 WordPress 用户中心的时候,我们需要让用户在前段上传自定义图片作为头像,因为很多用户都是小白,上传头像之前要求他们按照尺寸裁剪好是不大现实的.为了提升用户体验,我研究测试了很久,终于搞 ...

  9. 小程序上传头像图片裁剪

    原文链接:https://blog.csdn.net/qq_41049816/article/details/90604607* 给网上收到的 不知道好不好用 先收藏着: 小程序涉及到了用户上传头像的 ...

最新文章

  1. 病毒进入体内的48小时
  2. 世界未解之谜之----------Android Gradle
  3. 第五篇:JMeter 定时器
  4. windbg模拟器不准确现象
  5. ajax点评wnv冠军,对话wNv高层探知焦点 剑指世界冠军铸就王者路
  6. 云原生安全模型与实践
  7. Hyper-V的安装准备
  8. 大气数据计算机英语,大气数据计算机(ADC)
  9. 2022焊工(初级)考试题库及答案
  10. 顺序表的建立、查找、插入、删除
  11. 关于前后台数据的提交方式
  12. WeRateDog---分析推特数据
  13. 这40款优质APP大合集,总有一个适合你!
  14. 【十分钟读懂系列】之什么是SLF,PSL,MLF,SLO?
  15. SpringSecurity - RememberMe
  16. python xlwt_python中xlwt是什么
  17. Pycharm图形化性能测试工具Profile
  18. 山雨欲来风满楼——云计算趋势一览
  19. 入局先进空中交通,Overair推出全电动垂直起降飞机
  20. 应用宝---应用找回

热门文章

  1. ubuntu, xftp 命令安装 testlink (xampp-linux-x64-5.5.3,Linux Un 5.4.0-39)
  2. uni-app的介绍
  3. 资深摄影师眼中,青岛值得一游的景点有哪些?
  4. 运算符-12-多学一招原码反码补码,隐式和强制转换,位运算
  5. karabiner json语法
  6. 现货跌期货涨(现货大涨期货就大涨吗)
  7. 双鱼与水瓶会有未来吗(图
  8. fastjson 属性大写问题
  9. mysql我没压岁钱了,你压没压我?岁没岁我?该不该给我压岁钱表情包
  10. 遮罩层 遮挡不住 flash曲线的解决办法