iOS 上传头像 裁剪
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 上传头像 裁剪相关推荐
- photoclip 图片旋转_PhotoClip移动端、pc端上传头像裁剪
photoClip是一款支持移动设备触摸手势的图片裁剪jQuery插件. 一般引入 html部分 + 使用 'options' => ["enctype" => &qu ...
- element中el-upload和vue-cropper结合实现上传头像裁剪大小
通过这两个插件很容易就能实现裁剪图片的功能,但其中有一个难点就是,裁剪后的图片要上传到服务器,(依然使用原先的el-upload上传图片的接口) 我们知道,el-upload上传图片的接口需要一个fi ...
- 上传头像裁剪vue3(vue-cropper)配合element的upload
实现效果如下: 一.安装 npm install vue-cropper --save 二.在main.js中引入 import VueCropper from 'vue-cropper'; impo ...
- iOS上传头像, 相册权限,相册权限,拍照上传,相册选择图片,拍照页面语言设置,保存到相册...
2019独角兽企业重金招聘Python工程师标准>>> 1. 权限 在打开相机拍照或者打开相册选择图片之前, 有必要先判断先是否有权限, 如果没有权限应该给个提示, 让用户自己去设置 ...
- 上传头像裁剪 android,android 调用系统裁剪框 裁剪头像
[实例简介] [实例截图] [核心代码] package me.khrystal.activities; import android.content.Intent; import android.g ...
- 手机端-上传头像并裁剪
<headrunat="server"><metahttp-equiv="Content-Type"content="text/ht ...
- 【小程序开发原创】小程序裁剪图片上传头像,二维码源码
微信小程序 图片裁剪工具,简单易用 项目需求 在做微信小程序的时候有个图片上传之前裁剪的需求,找过一些github中的项目,都不太理想,主要是没有办法自定义宽高,于是自己研究了一下,做了一个简单的图片 ...
- php 图片上载 wordpress,WordPress 使用 Jcorp上传并裁剪图片作为自定义头像 —— PHP 后台部分...
在开发 WordPress 用户中心的时候,我们需要让用户在前段上传自定义图片作为头像,因为很多用户都是小白,上传头像之前要求他们按照尺寸裁剪好是不大现实的.为了提升用户体验,我研究测试了很久,终于搞 ...
- 小程序上传头像图片裁剪
原文链接:https://blog.csdn.net/qq_41049816/article/details/90604607* 给网上收到的 不知道好不好用 先收藏着: 小程序涉及到了用户上传头像的 ...
最新文章
- 病毒进入体内的48小时
- 世界未解之谜之----------Android Gradle
- 第五篇:JMeter 定时器
- windbg模拟器不准确现象
- ajax点评wnv冠军,对话wNv高层探知焦点 剑指世界冠军铸就王者路
- 云原生安全模型与实践
- Hyper-V的安装准备
- 大气数据计算机英语,大气数据计算机(ADC)
- 2022焊工(初级)考试题库及答案
- 顺序表的建立、查找、插入、删除
- 关于前后台数据的提交方式
- WeRateDog---分析推特数据
- 这40款优质APP大合集,总有一个适合你!
- 【十分钟读懂系列】之什么是SLF,PSL,MLF,SLO?
- SpringSecurity - RememberMe
- python xlwt_python中xlwt是什么
- Pycharm图形化性能测试工具Profile
- 山雨欲来风满楼——云计算趋势一览
- 入局先进空中交通,Overair推出全电动垂直起降飞机
- 应用宝---应用找回
热门文章
- ubuntu, xftp 命令安装 testlink (xampp-linux-x64-5.5.3,Linux Un 5.4.0-39)
- uni-app的介绍
- 资深摄影师眼中,青岛值得一游的景点有哪些?
- 运算符-12-多学一招原码反码补码,隐式和强制转换,位运算
- karabiner json语法
- 现货跌期货涨(现货大涨期货就大涨吗)
- 双鱼与水瓶会有未来吗(图
- fastjson 属性大写问题
- mysql我没压岁钱了,你压没压我?岁没岁我?该不该给我压岁钱表情包
- 遮罩层 遮挡不住 flash曲线的解决办法