iOS的AssetsLibrary框架解读与应用


概述

iOS提供的AssetsLibrary框架是用来读取和操作本地相册的,连接了我们应用程序和相册之间的访问, 该框架提供一下6个类:ALAssetsLibrary,AssetsLibrary,ALAssetsGroup,ALAsset,ALAssetsFilter,ALAssetRepresentation。

ALAssetsLibrary

ALAssetsLibrary类可以实现查看相册列表,增加相册,保存图片到相册等功能。

常用的几个方法:


1. 获得相册的组别(Get the list of groups that match the given types)

- (void)enumerateGroupsWithTypes:(ALAssetsGroupType)types usingBlock:(ALAssetsLibraryGroupsEnumerationResultsBlock)enumerationBlock failureBlock:(ALAssetsLibraryAccessFailureBlock)failureBlock;
在这个方法的enumerationBlock中读取分组列表,包括它的名称、封面图片等等。


2. 返回一个ALAsset对象(Returns an ALAsset object in the result block for a URL previously retrieved from an ALAsset object)

- (void)assetForURL:(NSURL *)assetURL resultBlock:(ALAssetsLibraryAssetForURLResultBlock)resultBlock failureBlock:(ALAssetsLibraryAccessFailureBlock)failureBlock;

3. 和上面类似,返回一个ALAssetsGroup对象

- (void)groupForURL:(NSURL *)groupURL resultBlock:(ALAssetsLibraryGroupResultBlock)resultBlock failureBlock:(ALAssetsLibraryAccessFailureBlock)failureBlock

AssetsLibrary

没提供什么方法,就是一个包含其他五个类的一个头文件

ALAssetsGroup

ALAssetsGroup就是相册组的类,可以通过这个类提供的方法来获取相册组的各种信息。

1. 获得 名称,类型,ID,NSURL

- (id)valueForProperty:(NSString *)property;

property可以是:

ALAssetsGroupPropertyName(名称)

ALAssetsGroupPropertyType(类型)

ALAssetsGroupPropertyPersistentID(ID)

ALAssetsGroupPropertyURL (NSURL)

2. 获得相册分组的封面图片

- (CGImageRef)posterImage;

注意使用:

<span style="font-size:18px;">//获取相册group的封面
    cell.imageView.image = [UIImage imageWithCGImage:[group posterImage]];</span>

3. 过滤器

- (void)setAssetsFilter:(ALAssetsFilter *)filter

ALAssetsFilter中有这些方法,是过滤类型

// Get all photos assets in the assets group.
+ (ALAssetsFilter *)allPhotos;
// Get all video assets in the assets group.
+ (ALAssetsFilter *)allVideos;
// Get all assets in the group.
+ (ALAssetsFilter *)allAssets;

4. 获得相册的组的数量

- (NSInteger)numberOfAssets;

5. 通过相册组获取里面的图片:

- (void)enumerateAssetsUsingBlock:(ALAssetsGroupEnumerationResultsBlock)enumerationBlock;
- (void)enumerateAssetsWithOptions:(NSEnumerationOptions)options usingBlock:(ALAssetsGroupEnumerationResultsBlock)enumerationBlock;
- (void)enumerateAssetsAtIndexes:(NSIndexSet *)indexSet options:(NSEnumerationOptions)options usingBlock:(ALAssetsGroupEnumerationResultsBlock)enumerationBlock;

一般使用第一个。

6. 增加图片

- (BOOL)addAsset:(ALAsset *)asset

ALAssetsFilter

上面说过了,提供了三种过滤方法:

// Get all photos assets in the assets group.
+ (ALAssetsFilter *)allPhotos;
// Get all video assets in the assets group.
+ (ALAssetsFilter *)allVideos;
// Get all assets in the group.
+ (ALAssetsFilter *)allAssets;

ALAssetRepresentation

ALAssetRepresentation对象封装了一个给定ALAsset对象的陈述

直接上代码说明问题。参考点击打开链接

//获取资源图片的详细资源信息
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]);

ALAsset

照片类,这里要说的就是

- (id)valueForProperty:(NSString *)property;</span>

property有如下类型:

  •    1.ALAssetPropertyType 资源的类型(照片,视频)
  •    2.ALAssetPropertyLocation 资源地理位置(无位置信息返回null)
  •    3.ALAssetPropertyDuation 播放时长(照片返回ALErorInvalidProperty)
  •    4.ALAssetPropertyOrientation 方向(共有8个方向,参见:ALAssetOrientation)
  •    5.ALAssetPropertyDate 拍摄时间(包含了年与日时分秒)
  •    6.ALAssetPropertyRepresentations 描述(打印看了下,只有带后缀的名称)
  •    7.ALAssetPropertyURLs(返回一个字典,键值分别是文件名和文件的url)
  •    8.ALAssetPropertyAssetURL 文件的url

得到缩略图

- (CGImageRef)thumbnail;

以上是AssetsLibrary框架中所有类的说明。


相册浏览器/选择器/照相机Demo:LGPhotoBrowser

记得给star哦

你可能感兴趣的:(AssetsLibrary,ALAsset,ALAssetsGroup,ALAssetsFilter)