iOS学习:调用相机,选择图片上传,带预览功能
来源:互联网 发布:淘宝包店网店计划书 编辑:程序博客网 时间:2024/05/09 01:56
一、新建工程
二、拖控件,创建映射
三、在.h中加入delegate
复制代码四、实现按钮事件
复制代码五、实现actionSheet delegate事件
复制代码六、实现ImagePicker delegate 事件
复制代码七、保存图片
高保真压缩图片方法
复制代码此方法可将图片压缩,但是图片质量基本不变,第二个参数即图片质量参数。
复制代码八、实现点击图片预览功能,滑动放大缩小,带动画
复制代码九、上传图片,使用ASIhttpRequest类库实现,由于本文重点不是网络请求,故不对ASIHttpRequest详细讲述,只贴出部分代码
复制代码效果图如下:
->
ps:
1.模拟器无法调用相机;
2.模拟器添加图片方法:将图片拖至模拟器主屏,会由模拟器safari打开,长按可保存至模拟器相册,即可进行模拟器调试了。
3.关于调用相机,是系统自带的,不知道如何修改英文标题为中文,如cancel换为取消等,望知道的大虾们不吝告知,万分感谢
源码下载地址:
115网盘礼包接收地址:http://115.com/lb/5lbqrhfl
115网盘礼包码:5lbqrhfl
二、拖控件,创建映射
三、在.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];
-
- }
- -(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];
- }
- }
- #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];
-
- }
-
- }
- 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];
->
ps:
1.模拟器无法调用相机;
2.模拟器添加图片方法:将图片拖至模拟器主屏,会由模拟器safari打开,长按可保存至模拟器相册,即可进行模拟器调试了。
3.关于调用相机,是系统自带的,不知道如何修改英文标题为中文,如cancel换为取消等,望知道的大虾们不吝告知,万分感谢
源码下载地址:
115网盘礼包接收地址:http://115.com/lb/5lbqrhfl
115网盘礼包码:5lbqrhfl
0 0
- iOS学习:调用相机,选择图片上传,带预览功能
- iOS学习:调用相机,选择图片上传,带预览功能
- iOS学习:调用相机,选择图片上传,带预览功能
- iOS学习:调用相机,选择图片上传,带预览功能
- iOS学习:调用相机,选择图片上传,带预览功能
- iOS学习:调用相机,选择图片上传,带预览功能
- iOS学习:调用相机,选择图片上传,带预览功能
- 原 iOS学习:调用相机,选择图片上传,带预览功能
- iOS学习:调用相机,选择图片上传,带预览功能 ,修改界面为中文
- 调用相机,选择图片上传,带预览功能
- 调用相机,选择图片上传,带预览功能
- 调用相机,选择图片上传,带预览功能
- iOS学习:调用相机和相册,选择图片上传
- ios调用相机,选择图片上传
- 带图片预览功能的图片上传
- 上传图片 带图片预览功能
- 带图片预览功能的上传表单
- 带预览功能的图片上传
- C++ 静态联编与静态联编
- ACM计算几何题目推荐
- 啊哈C——学习7.4存储英文人名
- 【百度】写一个字符串逆序的程序,时间复杂度和空间复杂度最低,效率越高越好
- leetcode题目的难度和面试频率
- iOS学习:调用相机,选择图片上传,带预览功能
- hdu1024 Max Sum Plus Plus
- Linux下TCP/IP内核参数优化
- uva 11549(floyd判圈)
- NavicatforMySQL插入数据出现乱码最近Navicat遇到个很蛋疼的问题,就是建立好数据
- 垃圾收集器与内存分配策略
- Android SDK中各种工具
- NoSQL数据库之Redis数据库:Redis的介绍与安装部署
- 数组-06. 找出不是两个数组共有的元素(20)