美文网首页
AssetLibrary

AssetLibrary

作者: 堂吉诃德灬 | 来源:发表于2017-05-13 16:12 被阅读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里面设定,不然有些应用自定义创建的照片文件夹扫描不出来

    相关文章

      网友评论

          本文标题:AssetLibrary

          本文链接:https://www.haomeiwen.com/subject/ztnztxtx.html