一、新建工程

二、拖控件,创建映射

三、在.h中加入delegate

  1. @interface ViewController : UIViewController

复制代码

四、实现按钮事件

  1. -(IBAction)chooseImage:(id)sender {
  2. UIActionSheet *sheet;
  3. // 判断是否支持相机
  4. if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
  5. {
  6. sheet  = [[UIActionSheet alloc] initWithTitle:@"选择" delegate:self cancelButtonTitle:nil destructiveButtonTitle:@"取消" otherButtonTitles:@"拍照",@"从相册选择", nil];
  7. }
  8. else {
  9. sheet = [[UIActionSheet alloc] initWithTitle:@"选择" delegate:self cancelButtonTitle:nil destructiveButtonTitle:@"取消" otherButtonTitles:@"从相册选择", nil];
  10. }
  11. sheet.tag = 255;
  12. [sheet showInView:self.view];
  13. }

复制代码

五、实现actionSheet delegate事件

  1. -(void) actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
  2. {
  3. if (actionSheet.tag == 255) {
  4. NSUInteger sourceType = 0;
  5. // 判断是否支持相机
  6. if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
  7. switch (buttonIndex) {
  8. case 0:
  9. // 取消
  10. return;
  11. case 1:
  12. // 相机
  13. sourceType = UIImagePickerControllerSourceTypeCamera;
  14. break;
  15. case 2:
  16. // 相册
  17. sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
  18. break;
  19. }
  20. }
  21. else {
  22. if (buttonIndex == 0) {
  23. return;
  24. } else {
  25. sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
  26. }
  27. }
  28. // 跳转到相机或相册页面
  29. UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init];
  30. imagePickerController.delegate = self;
  31. imagePickerController.allowsEditing = YES;
  32. imagePickerController.sourceType = sourceType;
  33. [self presentViewController:imagePickerController animated:YES completion:^{}];
  34. [imagePickerController release];
  35. }
  36. }

复制代码

六、实现ImagePicker delegate 事件

  1. #pragma mark - image picker delegte
  2. - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
  3. {
  4. [picker dismissViewControllerAnimated:YES completion:^{}];
  5. UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
  6. /* 此处info 有六个值
  7. * UIImagePickerControllerMediaType; // an NSString UTTypeImage)
  8. * UIImagePickerControllerOriginalImage;  // a UIImage 原始图片
  9. * UIImagePickerControllerEditedImage;    // a UIImage 裁剪后图片
  10. * UIImagePickerControllerCropRect;       // an NSValue (CGRect)
  11. * UIImagePickerControllerMediaURL;       // an NSURL
  12. * UIImagePickerControllerReferenceURL    // an NSURL that references an asset in the AssetsLibrary framework
  13. * UIImagePickerControllerMediaMetadata    // an NSDictionary containing metadata from a captured photo
  14. */
  15. // 保存图片至本地,方法见下文
  16. [self saveImage:image withName:@"currentImage.png"];
  17. NSString *fullPath = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:@"currentImage.png"];
  18. UIImage *savedImage = [[UIImage alloc] initWithContentsOfFile:fullPath];
  19. isFullScreen = NO;
  20. [self.imageView setImage:savedImage];
  21. self.imageView.tag = 100;
  22. }
  23. - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
  24. {
  25. [self dismissViewControllerAnimated:YES completion:^{}];
  26. }

复制代码

七、保存图片

高保真压缩图片方法

  1. NSData * UIImageJPEGRepresentation ( UIImage *image, CGFloat compressionQuality
  2. )

复制代码

此方法可将图片压缩,但是图片质量基本不变,第二个参数即图片质量参数。

  1. #pragma mark - 保存图片至沙盒
  2. - (void) saveImage:(UIImage *)currentImage withName:(NSString *)imageName
  3. {
  4. NSData *imageData = UIImageJPEGRepresentation(currentImage, 0.5);
  5. // 获取沙盒目录
  6. NSString *fullPath = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:imageName];
  7. // 将图片写入文件
  8. [imageData writeToFile:fullPath atomically:NO];
  9. }

复制代码

八、实现点击图片预览功能,滑动放大缩小,带动画

  1. -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
  2. {
  3. isFullScreen = !isFullScreen;
  4. UITouch *touch = [touches anyObject];
  5. CGPoint touchPoint = [touch locationInView:self.view];
  6. CGPoint imagePoint = self.imageView.frame.origin;
  7. //touchPoint.x ,touchPoint.y 就是触点的坐标
  8. // 触点在imageView内,点击imageView时 放大,再次点击时缩小
  9. 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)
  10. {
  11. // 设置图片放大动画
  12. [UIView beginAnimations:nil context:nil];
  13. // 动画时间
  14. [UIView setAnimationDuration:1];
  15. if (isFullScreen) {
  16. // 放大尺寸
  17. self.imageView.frame = CGRectMake(0, 0, 320, 480);
  18. }
  19. else {
  20. // 缩小尺寸
  21. self.imageView.frame = CGRectMake(50, 65, 90, 115);
  22. }
  23. // commit动画
  24. [UIView commitAnimations];
  25. }
  26. }

复制代码

九、上传图片,使用ASIhttpRequest类库实现,由于本文重点不是网络请求,故不对ASIHttpRequest详细讲述,只贴出部分代码

  1. ASIFormDataRequest *requestReport  = [[ASIFormDataRequest alloc] initWithURL:服务器地址];
  2. NSString *Path = [[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"] stringByAppendingPathComponent:@"currentImage.png"];
  3. [requestReport setFile:Path forKey:@"picturepath"];
  4. [requestReport buildPostBody];
  5. requestReport.delegate = self;
  6. [requestReport startAsynchronous];

复制代码

版权声明:本文为博主原创文章,未经博主允许不得转载。

iOS调用相机,相册,上传头像 分类: ios技术 2015-04-14 11:23 256人阅读 评论(0) 收藏的更多相关文章

  1. MS SQLServer 批量附加数据库 分类: SQL Server 数据库 2015-07-13 11:12 30人阅读 评论(0) 收藏

    ************************************************************ * 标题:MS SQLServer 批量附加数据库 * 说明:请根据下面的注释 ...

  2. iOS调用相机,相册,上传头像

    一.新建工程 二.拖控件,创建映射 三.在.h中加入delegate @interface ViewController : UIViewController 复制代码 四.实现按钮事件 -(IBAc ...

  3. Javascript图片预加载详解 分类: JavaScript HTML+CSS 2015-05-29 11:01 768人阅读 评论(0) 收藏

    预加载图片是提高用户体验的一个很好方法.图片预先加载到浏览器中,访问者便可顺利地在你的网站上冲浪,并享受到极快的加载速度.这对图片画廊及图片占据很大比例的网站来说十分有利,它保证了图片快速.无缝地发布 ...

  4. 分类算法简介 分类: B10_计算机基础 2015-03-09 11:08 257人阅读 评论(0) 收藏

    一.决策树 决策树是用于分类和预测的主要技术之一,决策树学习是以实例为基础的归纳学习算法,它着眼于从一组无次序.无规则的实例中 推理出以决策树表示的分类规则.构造决策树的目的是找出属性和类别间的关系, ...

  5. javascript的全局变量 分类: C1_HTML/JS/JQUERY 2014-08-07 11:03 562人阅读 评论(0) 收藏

    javascipt是一门面向对象的编程语言.由于存在一些全局属性及全局函数,因此可以认为存在一个全局变量,这些全局属性及全局函数均是其属性或函数. 在js核心中,并没有定义一个具体的全局变量,因此,j ...

  6. Makefile 入门与基本语法 分类: C/C++ ubuntu 2015-05-18 11:16 466人阅读 评论(0) 收藏

    在我看来,学会写简单的Makefile,阅读较复杂的makefile,是每一个Linux程序员都必须拥有的基本素质.Makefile可以自动识别哪些源文件被更改过,需要重新编译,那些不需要.从而节省大 ...

  7. 解决Eclipse中文乱码 分类: B1_JAVA 2014-06-25 11:23 336人阅读 评论(0) 收藏

    使用Eclipse编辑文件经常出现中文乱码或者文件中有中文不能保存的问题,Eclipse提供了灵活的设置文件编码格式的选项,我们可以通过设置编码 格式解决乱码问题.在Eclipse可以从几个层面设置编 ...

  8. Mahout快速入门教程 分类: B10_计算机基础 2015-03-07 16:20 508人阅读 评论(0) 收藏

    Mahout 是一个很强大的数据挖掘工具,是一个分布式机器学习算法的集合,包括:被称为Taste的分布式协同过滤的实现.分类.聚类等.Mahout最大的优点就是基于hadoop实现,把很多以前运行于单 ...

  9. hadoop的关键进程 分类: A1_HADOOP 2015-06-06 11:37 52人阅读 评论(0) 收藏

    hadoop集群中主要进程有 master:   NameNode, ResourceManager, slaves:   DataNode, NodeManager,  RunJar, MRAppM ...

随机推荐

  1. 简易控制中心,angular的简单使用

    <html> <head> <meta charset='utf-8'> <script src="js/angular.js">& ...

  2. apache.commoms.digester3 解析xml文件

    Technorati 标签: java,xml,digester,xmlrule,FromXmlRulesModule 1 简介 java解析xml,就个人所知有3种方法DOM.SAX和Digeste ...

  3. 如何让Spring MVC接收的参数可以转换为java对象

    场景: web.xml中增加了一个DispatcherServlet配置,并在同级目录下添加了**-servlert.xml文件,搭建起了一个spring mvc的restful访问接口. 问题描述: ...

  4. PAT1027

    People in Mars represent the colors in their computers in a similar way as the Earth people. 火星人在他们的 ...

  5. 随机法解决TSP问题

    TSP问题一直是个头疼的问题,但是解决的方法数不胜数,很多的算法也都能解决.百度资料一大堆,但是我找到了代码比较简练的一种.随机法.下面只是个人的看法而已,如果有任何问题虚心接受. 顾名思义,随机法就 ...

  6. 一个web项目在myeclipse中add deployment时无法被识别出来的原因

    当我们一个web项目,在myeclipse中,add deployment时,可能发现,根本无法被识别成web项目,可能的原因有:   1. 项目的properties ->Myeclipse ...

  7. gen_grant_dml.sql

    set echo off feedback off verify off pagesize 0 linesize 120 define v_grantee                = & ...

  8. 1.3 selenium IDE录制脚本转换为其他代码格式

    1.在seleniumIDE录制框中点击Options->options... 在Enable experimental features前打对勾,点击确定.

  9. byte[]和InputStream的相互转换

    1:byte[]转换为InputStream InputStream sbs = new ByteArrayInputStream(byte[] buf); 2:InputStream转换为Input ...

  10. 款待奶牛(treat)

    款待奶牛(treat) 题目描述 FJ有n(1≤n≤2000)个美味的食物,他想卖掉它们来赚钱给奶牛.这些食物放在一些箱子里,它们有些有趣的特性:(1)这些食物被编号为1-n,每一天FJ可以从这排箱子 ...