https://github.com/gang544043963/LGPhotoBrowser
iOS提供的AssetsLibrary框架是用来读取和操作本地相册的,连接了我们应用程序和相册之间的访问, 该框架提供一下6个类:ALAssetsLibrary,AssetsLibrary,ALAssetsGroup,ALAsset,ALAssetsFilter,ALAssetRepresentation。
ALAssetsLibrary
ALAssetsLibrary类可以实现查看相册列表,增加相册,保存图片到相册等功能。
常用的几个方法:
1. 获得相册的组别(Get the list of groups that match the given types)
[objc]view plaincopy
- (void)enumerateGroupsWithTypes:(ALAssetsGroupType)typesusingBlock:(ALAssetsLibraryGroupsEnumerationResultsBlock)enumerationBlockfailureBlock:(ALAssetsLibraryAccessFailureBlock)failureBlock;
在这个方法的enumerationBlock中读取分组列表,包括它的名称、封面图片等等。
2. 返回一个ALAsset对象(Returns an ALAsset object in the result block for a URL previously retrieved from an ALAsset object)
[objc]view plaincopy
- (void)assetForURL:(NSURL*)assetURLresultBlock:(ALAssetsLibraryAssetForURLResultBlock)resultBlockfailureBlock:(ALAssetsLibraryAccessFailureBlock)failureBlock;
3. 和上面类似,返回一个ALAssetsGroup对象
[objc]view plaincopy
- (void)groupForURL:(NSURL*)groupURLresultBlock:(ALAssetsLibraryGroupResultBlock)resultBlockfailureBlock:(ALAssetsLibraryAccessFailureBlock)failureBlock
AssetsLibrary
没提供什么方法,就是一个包含其他五个类的一个头文件
ALAssetsGroup
ALAssetsGroup就是相册组的类,可以通过这个类提供的方法来获取相册组的各种信息。
1. 获得 名称,类型,ID,NSURL
- (id)valueForProperty:(NSString *)property;
property可以是:
ALAssetsGroupPropertyName(名称)
ALAssetsGroupPropertyType(类型)
ALAssetsGroupPropertyPersistentID(ID)
ALAssetsGroupPropertyURL (NSURL)
2. 获得相册分组的封面图片
- (CGImageRef)posterImage;
注意使用:
[objc]view plaincopy
//获取相册group的封面
cell.imageView.image= [UIImageimageWithCGImage:[groupposterImage]];
3. 过滤器
- (void)setAssetsFilter:(ALAssetsFilter *)filter
ALAssetsFilter中有这些方法,是过滤类型
[objc]view plaincopy
// 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. 获得相册的组的数量
[objc]view plaincopy
- (NSInteger)numberOfAssets;
5. 通过相册组获取里面的图片:
[objc]view plaincopy
- (void)enumerateAssetsUsingBlock:(ALAssetsGroupEnumerationResultsBlock)enumerationBlock;
- (void)enumerateAssetsWithOptions:(NSEnumerationOptions)optionsusingBlock:(ALAssetsGroupEnumerationResultsBlock)enumerationBlock;
- (void)enumerateAssetsAtIndexes:(NSIndexSet*)indexSetoptions:(NSEnumerationOptions)optionsusingBlock:(ALAssetsGroupEnumerationResultsBlock)enumerationBlock;
一般使用第一个。
6. 增加图片
[objc]view plaincopy
- (BOOL)addAsset:(ALAsset*)asset
ALAssetsFilter
上面说过了,提供了三种过滤方法:
[objc]view plaincopy
// 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对象的陈述
直接上代码说明问题。参考点击打开链接
[objc]view plaincopy
//获取资源图片的详细资源信息
ALAssetRepresentation* representation = [assetdefaultRepresentation];
//获取资源图片的长宽
CGSize dimension = [representationdimensions];
//获取资源图片的高清图
[representationfullResolutionImage];
//获取资源图片的全屏图
[representationfullScreenImage];
//获取资源图片的名字
NSString* filename = [representationfilename];
NSLog(@"filename:%@",filename);
//缩放倍数
[representationscale];
//图片资源容量大小
[representationsize];
//图片资源原数据
[representationmetadata];
//旋转方向
[representationorientation];
//资源图片url地址,该地址和ALAsset通过ALAssetPropertyAssetURL获取的url地址是一样的
NSURL* url = [representationurl];
NSLog(@"url:%@",url);
//资源图片uti,唯一标示符
NSLog(@"uti:%@",[representationUTI]);
ALAsset
照片类,这里要说的就是
[objc]view plaincopy
- (id)valueForProperty:(NSString*)property;
property有如下类型:
1.ALAssetPropertyType资源的类型(照片,视频)
2.ALAssetPropertyLocation资源地理位置(无位置信息返回null)
3.ALAssetPropertyDuation播放时长(照片返回ALErorInvalidProperty)
4.ALAssetPropertyOrientation方向(共有8个方向,参见:ALAssetOrientation)
5.ALAssetPropertyDate 拍摄时间(包含了年与日时分秒)
6.ALAssetPropertyRepresentations描述(打印看了下,只有带后缀的名称)
7.ALAssetPropertyURLs(返回一个字典,键值分别是文件名和文件的url)
8.ALAssetPropertyAssetURL文件的url
得到缩略图
[objc]view plaincopy
- (CGImageRef)thumbnail;
以上是AssetsLibrary框架中所有类的说明。
相册浏览器/选择器/照相机Demo:LGPhotoBrowser