您的位置:首页 > 移动开发 > IOS开发

iOS开发AssetsLibrary框架访问本地相册

2016-03-16 22:29 375 查看
iOS开发里面要访问本地的相册那么除了UIImagePickerController之外就是AssetsLibrary框架了,那么我们下面就了解一下AssetsLibrary框架。

该框架下有几个类: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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: