iOS调用相机,相册,上传头像
一、新建工程
二、拖控件,创建映射
三、在.h中加入delegate
- @interface ViewController : UIViewController
复制代码
四、实现按钮事件
- -(IBAction)chooseImage:(id)sender {
- UIActionSheet *sheet;
- // 判断是否支持相机
- if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
- {
- sheet = [[UIActionSheet alloc] initWithTitle:@"选择" delegate:self cancelButtonTitle:nil destructiveButtonTitle:@"取消" otherButtonTitles:@"拍照",@"从相册选择", nil];
- }
- else {
- sheet = [[UIActionSheet alloc] initWithTitle:@"选择" delegate:self cancelButtonTitle:nil destructiveButtonTitle:@"取消" otherButtonTitles:@"从相册选择", nil];
- }
- sheet.tag = 255;
- [sheet showInView:self.view];
- }
复制代码
五、实现actionSheet delegate事件
- -(void) actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
- {
- if (actionSheet.tag == 255) {
- NSUInteger sourceType = 0;
- // 判断是否支持相机
- if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
- switch (buttonIndex) {
- case 0:
- // 取消
- return;
- case 1:
- // 相机
- sourceType = UIImagePickerControllerSourceTypeCamera;
- break;
- case 2:
- // 相册
- sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
- break;
- }
- }
- else {
- if (buttonIndex == 0) {
- return;
- } else {
- sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
- }
- }
- // 跳转到相机或相册页面
- UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init];
- imagePickerController.delegate = self;
- imagePickerController.allowsEditing = YES;
- imagePickerController.sourceType = sourceType;
- [self presentViewController:imagePickerController animated:YES completion:^{}];
- [imagePickerController release];
- }
- }
复制代码
六、实现ImagePicker delegate 事件
- #pragma mark - image picker delegte
- - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
- {
- [picker dismissViewControllerAnimated:YES completion:^{}];
- UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
- /* 此处info 有六个值
- * UIImagePickerControllerMediaType; // an NSString UTTypeImage)
- * UIImagePickerControllerOriginalImage; // a UIImage 原始图片
- * UIImagePickerControllerEditedImage; // a UIImage 裁剪后图片
- * UIImagePickerControllerCropRect; // an NSValue (CGRect)
- * UIImagePickerControllerMediaURL; // an NSURL
- * UIImagePickerControllerReferenceURL // an NSURL that references an asset in the AssetsLibrary framework
- * UIImagePickerControllerMediaMetadata // an NSDictionary containing metadata from a captured photo
- */
- // 保存图片至本地,方法见下文
- [self saveImage:image withName:@"currentImage.png"];
- NSString *fullPath = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:@"currentImage.png"];
- UIImage *savedImage = [[UIImage alloc] initWithContentsOfFile:fullPath];
- isFullScreen = NO;
- [self.imageView setImage:savedImage];
- self.imageView.tag = 100;
- }
- - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
- {
- [self dismissViewControllerAnimated:YES completion:^{}];
- }
复制代码
七、保存图片
高保真压缩图片方法
- NSData * UIImageJPEGRepresentation ( UIImage *image, CGFloat compressionQuality
- )
复制代码
此方法可将图片压缩,但是图片质量基本不变,第二个参数即图片质量参数。
- #pragma mark - 保存图片至沙盒
- - (void) saveImage:(UIImage *)currentImage withName:(NSString *)imageName
- {
- NSData *imageData = UIImageJPEGRepresentation(currentImage, 0.5);
- // 获取沙盒目录
- NSString *fullPath = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:imageName];
- // 将图片写入文件
- [imageData writeToFile:fullPath atomically:NO];
- }
复制代码
八、实现点击图片预览功能,滑动放大缩小,带动画
- -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
- {
- isFullScreen = !isFullScreen;
- UITouch *touch = [touches anyObject];
- CGPoint touchPoint = [touch locationInView:self.view];
- CGPoint imagePoint = self.imageView.frame.origin;
- //touchPoint.x ,touchPoint.y 就是触点的坐标
- // 触点在imageView内,点击imageView时 放大,再次点击时缩小
- if(imagePoint.x <= touchPoint.x && imagePoint.x +self.imageView.frame.size.width >=touchPoint.x && imagePoint.y <= touchPoint.y && imagePoint.y+self.imageView.frame.size.height >= touchPoint.y)
- {
- // 设置图片放大动画
- [UIView beginAnimations:nil context:nil];
- // 动画时间
- [UIView setAnimationDuration:1];
- if (isFullScreen) {
- // 放大尺寸
- self.imageView.frame = CGRectMake(0, 0, 320, 480);
- }
- else {
- // 缩小尺寸
- self.imageView.frame = CGRectMake(50, 65, 90, 115);
- }
- // commit动画
- [UIView commitAnimations];
- }
- }
复制代码
九、上传图片,使用ASIhttpRequest类库实现,由于本文重点不是网络请求,故不对ASIHttpRequest详细讲述,只贴出部分代码
- ASIFormDataRequest *requestReport = [[ASIFormDataRequest alloc] initWithURL:服务器地址];
- NSString *Path = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:@"currentImage.png"];
- [requestReport setFile:Path forKey:@"picturepath"];
- [requestReport buildPostBody];
- requestReport.delegate = self;
- [requestReport startAsynchronous];
复制代码
iOS调用相机,相册,上传头像的更多相关文章
- iOS调用相机,相册,上传头像 分类: ios技术 2015-04-14 11:23 256人阅读 评论(0) 收藏
一.新建工程 二.拖控件,创建映射 三.在.h中加入delegate @interface ViewController : UIViewController 复制代码 四.实现按钮事件 -(IBAc ...
- IOS调用相机相册
#import "SendViewController.h" //只能打开,没有加载图片的代码,老代码,供参考 #import <MobileCoreServices/UT ...
- 相册选择头像或者拍照 上传头像以NSData 图片二进制格式 表单上传
一.点击头像图片 或者按钮 在相册选择照片返回img,网络上传头像要用data表单上传 (1)上传头像属性 // 图片二进制格式 表单上传 @property (nonatomic, strong) ...
- 个人信息——头像更换(拍照或相册上传)~ 微信小程序
微信小程序中 在用户信息中关于用户头像更换(拍照或相册上传)功能实现. 图像点击触发事件: <image src='{{personImage}}' bindtap='changeAvatar' ...
- swift上传头像
很久没有写博客了,今天特地写了这个,也是一边仿照别人写的demo,注释部分都是需要的.需要的同学可以参考一下. @IBAction func headImageBtnPage(){ //上传头像 / ...
- day105:Mofang:设置页面初始化&更新头像/上传头像&设置页面显示用户基本信息
目录 1.设置页面初始化 2.更新头像 1.点击头像进入更新头像界面 2.更新头像页面初始化 3.更新头像页面CSS样式 4.头像上传来源选择:相册/相机 5.调用api提供的本地接口从相册/相机提取 ...
- apiCloud上传头像
apiCloud上传头像 1.拍照 2.从相机中选择 aui布局 <li class="aui-list-item"> <div class="aui- ...
- 完美实现类似QQ的自拍头像、上传头像功能!(Demo 源码)
现在很多下载客户端程序都需要设定自己头像的功能,而设定头像一般有两种方式:使用摄像头自拍头像,或者选择一个图片的某部分区域作为自己的头像. 一.相关技术 若要实现上述的自拍头像和上传头像的功能,会碰到 ...
- Jcrop+uploadify+php实现上传头像预览裁剪
最近由于项目需要,所以做了一个上传头像预览并且可以预览裁剪的功能,大概思路是上传的图片先保存到服务器,然后通过ajax从服务器获取到图片信息,再利用Jcrop插件进行裁剪,之后通过PHP获取到的四个裁 ...
随机推荐
- Android中Canvas绘图基础详解(附源码下载) (转)
Android中Canvas绘图基础详解(附源码下载) 原文链接 http://blog.csdn.net/iispring/article/details/49770651 AndroidCa ...
- 基础-Servlet
Servlet是运行在web服务器上的一个java类. 它的作用是将http请求和http相应进行操作完成我们的业务逻辑. servlet创建: 1.创建一个类extends HttpServlet ...
- svn 设置文件可执行权限
本地文件在commit到仓库之前若没有chmod +x 权限的话,那在svn仓库里的文件将会保持当前无可执行属性状态. 即使在本地chmod +x filename 之后,再提交到仓库也是没有用的.c ...
- windows程序设计(三)
MFC所有封装类一共200多个,但在MFC的内部技术不只是简单的封装 MFC的内部总共有六大关键技术,架构起了整个MFC的开发平台 一.MFC的六大关键技术包括: a).MFC程序的初始化过程 b). ...
- 把Wordpress集成到zen-cart里方法 各种修改 经典机制
作者: 闻庭牛 | 分类: zen cart插件精解 | 浏览: 4 | 评论: 暂时没有评论 如果你的Zen-cart需要一个Blog来发布一些你的最新动态,可以试试Wordpress,并且用WOZ ...
- Redis SAVE 命令 返回 ERR
今天使用redis-cli客户端中执行SAVE命令返回 (error) ERR Baidu找不到答案,去Google找一下 应该是redis-server服务没有root权限 然后sudo kill ...
- jquery判断节点是否存在
if($('.onloadMore').length>0){ return '节点存在'; }else{ return '节点不存在'; }
- 4-20ma转 0-5V
源:4-20ma转 0-5V 关于4-20ma转0-5v------解决方案--------------------------------------------------------恒流源(内阻 ...
- postgres 错误duplicate key value violates unique constraint 解决方案
SELECT setval('tablename_id_seq', (SELECT MAX(id) FROM tablename)+1) 主要是:serial key其实是由sequence实现的,当 ...
- HDU 3038 How Many Answers Are Wrong 很有意思的一道并查集问题
题目大意:TT 和 FF玩游戏(名字就值五毛),有一个数列,数列有N个元素,现在给出一系列个区间和该区间内各个元素的和,如果后出现的一行数据和前面一出现的数据有矛盾,则记录下来.求有矛盾数据的数量. ...