iOS开发AssetsLibrary框架访问本地相册
2016-03-16 22:29
375 查看
iOS开发里面要访问本地的相册那么除了UIImagePickerController之外就是AssetsLibrary框架了,那么我们下面就了解一下AssetsLibrary框架。
该框架下有几个类:ALAssetsLibrary,AlAssetsGroup,ALAsset,ALAssetsFilter和AlAssetRepresentation。下面呢我们就一个一个的简单了解下。
例如enumerateGroupsWithTypes方法列举所有相册。
ALAssetsGroup类有几个方法,posterImage方法就是相册的封面图片,numberOfAssets方法获取该相册的图片视频数量,可以通过enumerateAssetsUsingBlock方法列举出所有照片。
ALAssetsGroup 可以使用setAssetsFilter:(ALAssetsFilter *)filter过滤照片或者视频等。
首先是获取所有相册,通过ALAssetsLibrary的实例方法得到ALAssetsGroup类数组。
另外还可以通过该方法获取ALAssetPropertyLocation(照片位置),ALAssetPropertyDuration(视频时间),ALAssetPropertyDate(照片拍摄日期)等。
可以通过thumbnail方法就是获取该照片。根据相册获取该相册下所有图片,通过ALAssetsGroup的实例方法得到ALAsset类数组。
有需要demo的小伙伴请戳这里哦
另外iOS系统也提供了我们创建相册和保存相片到本地相册的方法,
保存相片到本地指定的相册,保存相片到本地系统的方法比较繁琐,所以就在github上面找到了一种比较便捷的保存相片的方法,而且也可以方便的保存视频等文件。如果有需要的小伙伴可以到我的资源下载,免费的哦!大家互相学习下!
该框架下有几个类:ALAssetsLibrary,AlAssetsGroup,ALAsset,ALAssetsFilter和AlAssetRepresentation。下面呢我们就一个一个的简单了解下。
ALAssetsLibrary
ALAssetsLibrary类可以实现查看相册列表,增加相册,保存图片到相册等功能。例如enumerateGroupsWithTypes方法列举所有相册。
ALAssetsGroup
ALAssetsGroup就是相册的类,可以通过valueForProperty方法查看不同属性的值,如:ALAssetsGroupPropertyName,相册名。ALAssetsGroup类有几个方法,posterImage方法就是相册的封面图片,numberOfAssets方法获取该相册的图片视频数量,可以通过enumerateAssetsUsingBlock方法列举出所有照片。
ALAssetsGroup 可以使用setAssetsFilter:(ALAssetsFilter *)filter过滤照片或者视频等。
首先是获取所有相册,通过ALAssetsLibrary的实例方法得到ALAssetsGroup类数组。
//获取本地所有相册 ALAssetsLibraryGroupsEnumerationResultsBlock listGroupBlock = ^(ALAssetsGroup *group,BOOL *stop){ //添加过滤操作,得到所有相片 ALAssetsFilter *onlyPhotosFilter = [ALAssetsFilter allPhotos]; [group setAssetsFilter:onlyPhotosFilter]; if (group.numberOfAssets) { //添加判断,过滤掉空的相册,得到本地所有的相册 [self.imageGroup addObject:group]; }else{ [self.tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO]; } }; NSUInteger groupTypes = ALAssetsGroupAll; [self.assetsLibrary enumerateGroupsWithTypes:groupTypes usingBlock:listGroupBlock failureBlock:^(NSError *error) { //如果失败,可能因为授权问题 NSLog(@"Not found any group!\n"); }];
ALAsset
ALAsset类也可以通过valueForProperty方法查看不同属性的值,如:ALAssetPropertyType,asset的类型,有三种ALAssetTypePhoto, ALAssetTypeVideo or ALAssetTypeUnknown。另外还可以通过该方法获取ALAssetPropertyLocation(照片位置),ALAssetPropertyDuration(视频时间),ALAssetPropertyDate(照片拍摄日期)等。
可以通过thumbnail方法就是获取该照片。根据相册获取该相册下所有图片,通过ALAssetsGroup的实例方法得到ALAsset类数组。
[seletGroup enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) { // 1.获取相片的缩略图(模糊,但是页面非常流畅) UIImage *image1 = [UIImage imageWithCGImage:result.thumbnail]; /* // 2.获取相片(比上面一种要清晰,不过如果相片多的话页面会稍显卡顿) UIImage *image2 = [UIImage imageWithCGImage:result.aspectRatioThumbnail]; // 3.获取高清相片(比较消耗内存资源,可能会出现应用卡死) ALAssetRepresentation *representation = [result defaultRepresentation]; UIImage *image3 = [UIImage imageWithCGImage:[representation fullResolutionImage]]; // 4.获取全屏相片(同样比较消耗内存资源) UIImage *image4 = [UIImage imageWithCGImage:[representation fullScreenImage]]; */ if (image1) { [images addObject:image1]; } }];
ALAssetRepresentation
ALAsset类有一个defaultRepresentation方法,返回值是ALAssetRepresentation类,该类的作用就是获取该资源图片的详细资源信息。//获取资源图片的详细资源信息 ALAssetRepresentation* representation = [asset defaultRepresentation]; //获取资源图片的长宽 CGSize dimension = [representation dimensions]; //获取资源图片的高清图 [representation fullResolutionImage]; //获取资源图片的全屏图 [representation fullScreenImage]; //获取资源图片的名字 NSString* filename = [representation filename]; NSLog(@"filename:%@",filename); //缩放倍数 [representation scale]; //图片资源容量大小 [representation size]; //图片资源原数据 [representation metadata]; //旋转方向 [representation orientation]; //资源图片url地址,该地址和ALAsset通过ALAssetPropertyAssetURL获取的url地址是一样的 NSURL* url = [representation url]; NSLog(@"url:%@",url); //资源图片uti,唯一标示符 NSLog(@"uti:%@",[representation UTI]);
有需要demo的小伙伴请戳这里哦
另外iOS系统也提供了我们创建相册和保存相片到本地相册的方法,
//创建相册 [library addAssetsGroupAlbumWithName:KPhotoName resultBlock:^(ALAssetsGroup *group) { // 创建成功后的操作 } failureBlock:^(NSError *error) { // 创建失败 }];
保存相片到本地指定的相册,保存相片到本地系统的方法比较繁琐,所以就在github上面找到了一种比较便捷的保存相片的方法,而且也可以方便的保存视频等文件。如果有需要的小伙伴可以到我的资源下载,免费的哦!大家互相学习下!
- (void)saveImageData:(NSData *)imageData toAlbum:(NSString *)albumName metadata:(NSDictionary *)metadata completion:(ALAssetsLibraryWriteImageCompletionBlock)completion failure:(ALAssetsLibraryAccessFailureBlock)failure;
相关文章推荐
- iOS之页面传值-----单例传值、通知传值
- ios json
- IOS 沙盒机制 浅析
- IOS 杂笔-2(协议)
- IOS 杂笔-1(为什么不继承类簇?)
- iOS的观察者模式
- iOS边练边学--自定义等高的cell
- iOS:使用block进行类与类,控制器与控制器之间的传值
- iOS 学习笔记-关于Button
- iOS之05-三大特性之封装
- Core Motion 加速器的使用步骤
- iOS启动屏 ➕ 闪屏的方法
- iOS多线程开发
- IOS开发之申请测试证书的步骤
- IOS动画
- ios--随笔二
- UVa 11111 - Generalized Matrioshkas
- NSMutableAttributedString
- iOS开发:XIB之AutoLayout添加约束
- NSMutableAttributedString