有关iOS相册的调用
来源:互联网 发布:服务器开放端口 编辑:程序博客网 时间:2024/05/17 09:40
前段时间对相册研究了一小下,今天闲着就总结总结 给自己加深下印象~
//创建照片选择器 UIImagePickerController *pickerVc = [[UIImagePickerController alloc]init];//设置之前根据需要判断对应数据源是否支持 否则会崩溃if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { NSLog(@"支持相机"); //设置数据源 pickerVc.sourceType = UIImagePickerControllerSourceTypeCamera; } if([UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypePhotoLibrary]) { NSLog(@"支持相册列表"); //默认类型 pickerVc.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; } if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeSavedPhotosAlbum]) { NSLog(@"支持相片库"); pickerVc.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; } //设置代理 pickerVc.delegate = self; //是否允许编辑图片 pickerVc.allowsEditing = YES; //设置所支持的类型//kUTTypeImage(图片)/kUTTypeMovie(视频)这两个字符串常量定义在MobileCoreServices框架中。//需导入头文件import <MobileCoreServices/MobileCoreServices.h>` pickerVc.mediaTypes = @[(NSString *)kUTTypeImage]; //弹出视图 [self presentViewController:pickerVc animated:YES completion:nil];<UIImagePickerControllerDelegate>代理方法// 选中照片调用- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info{ NSLog(@"%@",info); /* 此处info 有六个值 * UIImagePickerControllerMediaType; // 指定用户选择的媒体类型 * UIImagePickerControllerOriginalImage; // 原始图片 * UIImagePickerControllerEditedImage; // 裁剪后图片 * UIImagePickerControllerCropRect; // 剪裁尺寸 * UIImagePickerControllerMediaURL; // 媒体的url * UIImagePickerControllerReferenceURL // 原件的url * UIImagePickerControllerMediaMetadata // 数据源为照相机时 才有效 */// 获取媒体类型NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];// 判断获取类型:图片 if ([mediaType isEqualToString:( NSString *)kUTTypeImage]){ UIImage *image; if ([picker allowsEditing]){ //获取用户编辑之后的图像 image = [info objectForKey:UIImagePickerControllerEditedImage]; } else { // 照片的原数据参数 image = [info objectForKey:UIImagePickerControllerOriginalImage]; } }**获取到的图片可以保存到沙盒也可以保存到相册保存的方法见文章最后**注:使用ALAssetsLibrary需导入头文件 #import <AssetsLibrary/AssetsLibrary.h>// 判断获取类型:视频if ([mediaType isEqualToString:(NSString *) //获取视频文件的url NSURL* mediaURL = [info objectForKey:UIImagePickerControllerMediaURL]; //创建ALAssetsLibrary对象并将视频保存到媒体库 // Assets Library 框架包是提供了在应用程序中操作图片和视频的相关功能。相当于一个桥梁,链接了应用程序和多媒体文件。 ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc] init]; // 将视频保存到相册中(前提是用相机拍摄的视频) [assetsLibrary writeVideoAtPathToSavedPhotosAlbum:mediaURL completionBlock:^(NSURL *assetURL, NSError *error) { if (!error) { NSLog(@"Save success"); }else{ NSLog(@"error:%@", error); } }]; } //注意:如果允许编辑且选中不进行dismiss 会卡死 [self dismissViewControllerAnimated:YES completion:nil];}//点击取消时调用- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{ [self dismissViewControllerAnimated:YES completion:nil];}----------//1.保存到沙盒NSData *imageData = UIImageJPEGRepresentation(image, 0.5);NSString * str = NSTemporaryDirectory();NSString * path = [str stringByAppendingString:[NSString stringWithFormat:@"%@",@"imageName"]];[imageData writeToFile:path atomically:YES];//2.保存到手机相册 // 保存到手机相册 SEL selectorToCall = @selector(image:didFinishSavingWithError:contextInfo:); UIImageWriteToSavedPhotosAlbum(image, self, selectorToCall, nil);// 保存相册之后的回调方法- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo{if (error) { NSLog(@"保存失败"); }else { NSLog(@"保存成功"); }}
关于UIImageJPEGRepresentation和UIImagePNGRepresentation的比较推荐地址http://blog.csdn.net/mideveloper/article/details/11473627
总结3点:
1.后者耗时相对较长,在相册选中照片时可能会出现卡顿
2.后者相对数据文件较大
3.如果图片清晰度要求不高UIImageJPEGRepresentation设置第二个参数可大幅度降低数据文件大小并且图片质量根据系数也不会很低
下面是一些干货
注:以下干货均为摘抄记录
// 前面的摄像头是否可用- (BOOL) isFrontCameraAvailable{ return [UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceFront];}// 后面的摄像头是否可用- (BOOL) isRearCameraAvailable{ return [UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceRear];}// 检查摄像头是否支持录像- (BOOL) doesCameraSupportShootingVideos{ return [self cameraSupportsMedia:( NSString *)kUTTypeMovie sourceType:UIImagePickerControllerSourceTypeCamera];}// 检查摄像头是否支持拍照- (BOOL) doesCameraSupportTakingPhotos{ return [self cameraSupportsMedia:( NSString *)kUTTypeImage sourceType:UIImagePickerControllerSourceTypeCamera];}// 判断是否支持某种多媒体类型:拍照,视频- (BOOL) cameraSupportsMedia:(NSString *)paramMediaType sourceType:(UIImagePickerControllerSourceType)paramSourceType{ __block BOOL result = NO; if ([paramMediaType length] == 0){ NSLog(@"Media type is empty."); return NO; } NSArray *availableMediaTypes =[UIImagePickerController availableMediaTypesForSourceType:paramSourceType]; [availableMediaTypes enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL*stop) { NSString *mediaType = (NSString *)obj; if ([mediaType isEqualToString:paramMediaType]){ result = YES; *stop= YES; } }]; return result;}
本来还想发表一下对相册多选照片的总结 不过写了这么多有点小累 ~
还是下篇补充吧��
1 0
- 有关iOS相册的调用
- iOS 相册 相机的调用及上传
- iOS学习: 系统相机 相册的调用
- iOS 调用相册
- ios之相册调用
- iOS调用系统的相册(包括,显示中文的标题)
- iOS调用相册、相机、上传
- iOS调用相册和摄像头
- ios调用相册和摄像头
- iOS调用相册和摄像头
- iOS 图片相册调用封装
- iOS调用相册和摄像头
- iOS--调用相机和相册
- IOS 调用照相机、相册功能
- iOS 10调用相机相册
- iOS相机与相册的调用常用代码
- iOS - 调用相机相册的方法 + 上传图片
- iOS调用系统相册,相机上传头像的基本技巧
- <%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%>这几个编码分别代表什么意思?
- 使用inf文件安装文件系统驱动程序的三种方式
- HTML <hr> 标签
- 互联网协议入门(二)
- [Sencha ExtJS6 Modern] 改进bug: 当容器(如Container/Panel/List)内容未超出容器高度时, Scroller无法上/下拉(即越界滚动)
- 有关iOS相册的调用
- 并发登录人数控制--Shiro系列(二)
- event.preventDefault方法的使用
- 怎么让html里的js脚本延迟5秒运行?
- 立体类族共有的抽象类
- 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一
- java内存优化
- [易飞]导航图繁体显示
- 动态规划:从新手到专家