AssetLibrary

2017-05-13  本文已影响67人  堂吉诃德灬

AssetLibrary组成

AssetLibrary:代表整个设备中的资源库(照片库),通过AssetLibrary可以获取设备中的照片和视频,同时也可以增加相册或将照片写入相册

ALAssetsGroup:映射照片库中的相册组,通过ALAssetsGroup可以获取某个相册的信息以及相册下的资源,同时也可以对某个相册添加资源

ALAsset:映射照片库中的一个照片或者视频,通过ALAsset可以获取某个照片或者视频的详细信息,或者保存照片和视频

ALAssetRepressentation:ALAssetRepresentation 是对 ALAsset 的封装(但不是其子类),可以更方便地获取 ALAsset 中的资源信息,每个 ALAsset 都有至少有一个 ALAssetRepresentation 对象,可以通过 defaultRepresentation 获取。而例如使用系统相机应用拍摄的 RAW + JPEG 照片,则会有两个 ALAssetRepresentation,一个封装了照片的 RAW 信息,另一个则封装了照片的 JPEG 信息

AssetLibrary方法

将图片写入相册的方法:

//将图片写入相册中,图片是CGImage类型的,可以通过[UIImage CGImage]来获得
- (void)writeImageToSavedPhotosAlbum:(CGImageRef)imageRef orientation:(ALAssetOrientation)orientation completionBlock:(ALAssetsLibraryWriteImageCompletionBlock)completionBlock 

//将图片保存到相册,同时在metadata字典中指定图片的方向
- (void)writeImageToSavedPhotosAlbum:(CGImageRef)imageRef metadata:(NSDictionary *)metadata completionBlock:(ALAssetsLibraryWriteImageCompletionBlock)completionBlock 

//将图片保存到相册,同时如果图像数据和元数据冲突,图像数据将被重写
//有关元数据可以看这一篇文章 http://blog.csdn.net/zhi_sheng/article/details/52595523
- (void)writeImageDataToSavedPhotosAlbum:(NSData *)imageData metadata:(NSDictionary *)metadata completionBlock:(ALAssetsLibraryWriteImageCompletionBlock)completionBlock 

在上面的方法中orientation有这么几个选项:

    ALAssetOrientationUp 上
    ALAssetOrientationDown 下
    ALAssetOrientationLeft 左
    ALAssetOrientationRight 右
    ALAssetOrientationUpMirrored 水平上翻转
    ALAssetOrientationDownMirrored 水平下翻转
    ALAssetOrientationLeftMirrored 竖直左翻转
    ALAssetOrientationRightMirrored 竖直右翻转

从相册资源库读取相册的方法:

//遍历AssetLibrary得到的是ALAssetsGroup
- (void)enumerateGroupsWithTypes:(ALAssetsGroupType)types usingBlock:(ALAssetsLibraryGroupsEnumerationResultsBlock)enumerationBlock failureBlock:(ALAssetsLibraryAccessFailureBlock)failureBlock

types的类型:
   ALAssetsGroupLibrary 所有的相册(包括本地和 iTunes 的)
   ALAssetsGroupAlbum  同步得到iTunes的和创建的(不包括共享的)
   ALAssetsGroupEvent  同步到 iTunes 的(包括相机导入的)
   ALAssetsGroupFaces  同步 iTunes 的 
   ALAssetsGroupSavedPhotos 所有相册(包括相机导入的)
   ALAssetsGroupPhotoStream itunes 同步的(包括共享的)
   ALAssetsGroupAll 所有可见的相册

使用代码范例:

ALAssetsLibrary *assetsLibrary;
 NSMutableArray *groupArray;
  assetsLibrary = [[ALAssetsLibrary alloc] init];
    groupArray=[[NSMutableArray alloc] initWithCapacity:1];
    [assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
        if (group) {
            [groupArray addObject:group];
        
            //            通过这个可以知道相册的名字,从而也可以知道安装的部分应用
            //例如 Name:柚子相机, Type:Album, Assets count:1
            NSLog(@"%@",group);
        }
    } failureBlock:^(NSError *error) {
        NSLog(@"Group not found!\n");
    }];

//该方法为异步执行的方法,会在调用此方法的线程内执行

ALAssetsGroup的方法以及属性

- (id)valueForProperty:(NSString *)property:返回相册的一些属性它有以下几个键:
extern NSString *const ALAssetsGroupPropertyName 相册的名称 
extern NSString *const ALAssetsGroupPropertyType 相册的类型
extern NSString *const ALAssetsGroupPropertyPersistentID 相册的标示 id
extern NSString *const ALAssetsGroupPropertyURL 相册的 url
- (CGImageRef)posterImage 返回相册的封面,且该封面图片的方向是正确的
- (void)setAssetsFilter:(ALAssetsFilter *)filter  设置相册的筛选条件,它有以下几个键:
//所有的照片
+ (ALAssetsFilter *)allPhotos;
// 所有的视频
+ (ALAssetsFilter *)allVideos;
// 相册里的所有资源,包括照片和视频
+ (ALAssetsFilter *)allAssets;
- (NSInteger)numberOfAssets 相册里面资源的数量,这个资源数量和刚才设置的过滤器有关
//遍历相册里面的所有资源,得到的是ALAsset对象
- (void)enumerateAssetsUsingBlock:(ALAssetsGroupEnumerationResultsBlock)enumerationBlock

代码实用范例:

[_group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {
        if (result) {
            [imageArray addObject:result];
            NSLog(@"%@",result);
             iv.image=[UIImage imageWithCGImage: result.thumbnail];
NSString *type=[result valueForProperty:ALAssetPropertyType];
        }
    }];
//该方法为同步执行的方法,需要遍历完才能返回,所以一般需要放在后台线程

ALAsset的方法及属性

- (id)valueForProperty:(NSString *)property  获取照片相关的各种属性,这些属性的键为

ALAssetPropertyType 资源的类型(照片,视频)
ALAssetPropertyLocation 资源地理位置(无位置信息返回null)
ALAssetPropertyDuation 播放时长(照片返回ALErorInvalidProperty)
ALAssetPropertyOrientation 方向(共有8个方向,参见:ALAssetOrientation)
ALAssetPropertyDate 拍摄时间(包含了年与日时分秒)
ALAssetPropertyRepresentations 描述(打印看了下,只有带后缀的名称)
ALAssetPropertyURLs(返回一个字典,键值分别是文件名和文件的url)
ALAssetPropertyAssetURL (文件的url )
- (CGImageRef)thumbnail  照片缩略图(这个方法获得的是质量不高的缩略图,它是从图片中间进行正方形的裁剪,没有按比例缩放)
- (CGImageRef)aspectRatioThumbnail  获得照片的缩略图,相比于上一个方法,它是进行比例缩放的
保存图片到相册:
- (void)writeModifiedImageDataToSavedPhotosAlbum:(NSData *)imageData metadata:(NSDictionary *)metadata completionBlock:(ALAssetsLibraryWriteImageCompletionBlock)completionBlock;
保存图片到相册:
imageData:要保存的图片流,
metadata:保存图片的元数据,一般为 nil,如果和前面的 imageData 冲突的话,会覆盖掉前面的信息,
completionBlock:保存完的 block 回调,定义为:typedef void (^ALAssetsLibraryWriteImageCompletionBlock)(NSURL *assetURL, NSError *error),
assetUrl: 保存成功后映射该相片的 url
error: 保存失败信息.
- (ALAssetRepresentation *)defaultRepresentation  获取该图片的详细信息返回的是ALAssetRepresentation对象

ALAssetRepresentation方法及属性

- (NSString *)UTI 图片资源UTI 唯一标识符

- (CGSize)dimensions   获取图片的长宽

- (long long)size  图片资源容量大小

- (CGImageRef)fullResolutionImage  图片资源的高清图

- (CGImageRef)fullScreenImage    图片资源全屏图,相比于上一个方法,使用它得到的图片足够

- (NSURL *)url   资源图片url地址,该地址和ALAsset通过ALAssetPropertyAssetURL获取的url地址是一样的

- (NSDictionary *)metadata  资源图片数据

- (ALAssetOrientation)orientation     资源图片旋转方向

- (float)scale    资源图片缩放倍数

- (NSString *)filename    资源图片的名字

注意:在用ALAssetsLibrary遍历照片时,group的筛选条件一定要在遍历方法成功的block里面设定,不然有些应用自定义创建的照片文件夹扫描不出来

上一篇下一篇

猜你喜欢

热点阅读