一、概述

  
  AssetsLibrary框架:从iOS4.0开始提供,可以通过它获取设备里的图片和视频等资料,以API的方式提供,而且界面式的,比UIImagePickerViewController灵活很多。既可以读又可以写。
二、读取资料库中的全部资料
1.大概步骤,首先通过ALAssetsLibrary获取group,然后再获取每个group中的每个ALAsset,通过ALAsset获取图片或者视频链接。
2.获取全部资料(ALAsset)以及链接:
  NSMutableArray *assetGroups = [[NSMutableArray alloc] init];
  void (^assetGroupEnumerator) (struct ALAssetsGroup *, BOOL *) = ^(ALAssetsGroup *group, BOOL *stop{
    if(group != nil) {
       [assetGroups addObject:group];
    }
  };
 
  ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
  NSUInteger groupTypes = ALAssetsGroupAll; 
  [library enumerateGroupsWithTypes:groupTypes usingBlock:assetGroupEnumerator failureBlock:nil];
  [library release];
 
  NSMutableArray *assets = [[NSMutableArray alloc] init];
  NSMutableArray *assetURLArray = [[NSMutableArray alloc] init];
  void (^assetEnumerator) (struct ALAsset *, NSUInteger, BOOL *) = ^(ALAsset *result, NSUInteger index, BOOL *stop) {
    if(result != nil) {
       if(![assetURLArray containsObject:[result valueForProperty:ALAssetPropertyURLs]]) {
         if(![[result valueForProperty:ALAssetPropertyType] isEqualToString:ALAssetTypeVideo]) {
           [assetURLArray addObject:[result valueForProperty:ALAssetPropertyURLs]];
           [assets addObject:result];
         }
       }
    }
  };
 
  for (ALAssetsGroup *group in assetGroups) {
     [group enumerateAssetsUsingBlock:assetEnumerator];
  }
  
3.通过ALAsset链接获取图片或者视频内容
    
  ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *returnAsset){   
     //获取资料的缩略图,图片视频通用
     UIImage *image = [UIImage imageWithCGImage:returnAsset.defaultRepresentation.fullResolutionImage];
     
     //针对图片或者视频做自定义处理
     NSString *type = [returnAsset valueForProperty:ALAssetPropertyType];
     if([type isEqualToString:ALAssetTypePhoto]){
         
     }else if([type isEqualToString:ALAssetTypeVideo]){
      //获取视频时长
        NSNumber *duration = [returnAsset valueForProperty:ALAssetPropertyDuration]
     }  
  };
    
  NSString *assetURL = [assetURLArray objectAtIndex:0];
  ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
  [library assetForURL:[NSURL URLWithString:assetURL] resultBlock:resultblock failureBlock:nil];
  [library release];
  
4.有时候有些视频资料没有写入资料库,但是我们仍然需要获取视频的时长。这时候我们就不能用第3条中提到的API来获取视频长度,我们可以采用AVFoundation框架中的一个类:AVURLAsset。
  代码如下:
  AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:videoURL options:nil];
  CMTime ctTime = asset.duration;
  [asset release];
  NSInteger totalSeconds = ctTime.value / ctTime.timescale;
三、将本地图片或者视频写入资料库
1.步骤:调用ALAssetsLibrary将视频或者图片写入资料库,写入成功之后,返回一个URL链接。
2.代码:
  ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
  if([cacheFilePath rangeOfString:@"jpg" options:NSCaseInsensitiveSearch].length > 0 ||
     [cacheFilePath rangeOfString:@"png" options:NSCaseInsensitiveSearch].length > 0)
  {
     UIImage *image = [UIImage imageWithContentsOfFile:cacheFilePath];
     [library writeImageToSavedPhotosAlbum:image.CGImage metadata:nil completionBlock:^(NSURL *assetURL, NSError *error){
        NSString *assetUrlString = assetURL.absoluteString;
        //根据需求做相应动作,比如保存这个链接
     }];
  }else{
     NSURL *cacheURL = [NSURL URLWithString:cacheFilePath];
     [library writeVideoAtPathToSavedPhotosAlbum:cacheURL completionBlock:^(NSURL *assetURL, NSError *error){
        NSString *assetUrlString = assetURL.absoluteString;
        //根据需求做相应动作,比如保存这个链接
     }];
  }
  [library release];

AssetsLibrary使用介绍相关推荐

  1. 使用AssetsLibrary库实现系统类似照片浏览器

    使用AssetsLibrary库实现系统类似照片浏览器 使用AssetsLibrary库实现系统类似照片浏览器 1AssetsLibrary的引入 2AssetsLibrary组成介绍 1Assets ...

  2. iOS 开发之照片框架详解

    一. 概要 在 iOS 设备中,照片和视频是相当重要的一部分.最近刚好在制作一个自定义的 iOS 图片选择器,顺便整理一下 iOS 中对照片框架的使用方法.在 iOS 8 出现之前,开发者只能使用 A ...

  3. 系统SDK介绍-02

    系统SDK介绍 打开相册选择图片 打开相册选择视频 打开相机拍摄图片 打开相机拍摄视频 配置权限: 在info.plist文件中添加需要的权限 相机权限:Privacy - Camera Usage ...

  4. iOS总体框架介绍和详尽说明

    总体介绍 iOS为应用程序开发提供了许多可使用的框架,并构成IOS操作系统的层次架构,分为四层,从上到下依次为:Cocoa Touch Layer(触摸UI层).MediaLayer(媒体层).Cor ...

  5. iOS 常用框架介绍

    iOS框架介绍      Cocoa Touch GameKit  实现对游戏中心的支持,让用户能够在线共享他们的游戏相关的信息  iOS设备之间蓝牙数据传输   从iOS7开始过期   局域网游戏 ...

  6. [绍棠] PhotoKit介绍

    PhotoKit是一套比AssetsLibrary更完整也更高效的库,而其处理方式也跟AssetsLibrary有很大的不同.该框架不仅支持照片的编辑,还提供了直接访问照片管理应用程序里的照片和视频资 ...

  7. 简单介绍互联网领域选择与营销方法

    在我看来,互联网领域的选择是"安家",而营销方法的不同则表现了"定家"的方式多种多样,只有选对了,"家"才得以"安定". ...

  8. 常用开源协议介绍以及开源软件规范列表

    1. 开源协议介绍 GPL: General Public License,开源项目最常用的许可证,衍生代码的分发需开源并且也要遵守此协议.该协议也有很多变种,不同变种要求会略微不同. MPL: MP ...

  9. python:Json模块dumps、loads、dump、load介绍

    20210831 https://www.cnblogs.com/bigtreei/p/10466518.html json dump dumps 区别 python:Json模块dumps.load ...

最新文章

  1. 利用CxImage实现编解码Gif图像代码举例
  2. 独家 | 混乱的句子表明AI仍然不能真正理解语言
  3. NFS: Mac OS X (server) and Mac OS X (clients)实现思路
  4. 小巧但强大,浏览器开发常用工具插件一枚
  5. 数字图像处理:第二十一章 视频压缩标准
  6. Py之pandas:利用where、replace等函数对dataframe格式数据按照条件进行数据替换
  7. BigData:大数据开发的简介、核心知识(linux基础+Java/Python编程语言+Hadoop{HDFS、HBase、Hive}+Docker)、经典场景应用之详细攻略
  8. tensorflow中张量、常量、变量、占位符
  9. java web 多语言_基于 Selenium WebDriver 实现多语言环境下自动化截图
  10. spring 的4种事务管理(1种编程式+3种声明式)
  11. Java LinkedList公共int indexOf(Object o)方法(带示例)
  12. html print 边距,css print
  13. WHMCS v8.0 bate1开心版源码
  14. 一步步教你如何配置Java环境变量(超级详细)
  15. 魔方机器人之搭建Python编程环境
  16. COALESCE()函数 一个非常有用的函数
  17. 【spine】spine 简介
  18. 深拷贝deepClone
  19. Facebook首席运营官桑德伯格在2012哈佛商学院毕业典礼上的演讲
  20. idea加到右键菜单

热门文章

  1. 图解JVM的Class文件格式(详细版)
  2. 第二百一十九天 how can I 坚持
  3. Redis数据存储解决方案
  4. Cache技术―OSCache
  5. Linux常用命令 -- screen
  6. WEB攻防实战篇,思维导图
  7. DATEDIFF 函数使用
  8. C++学习——static
  9. 【剑指offer】面试题30:包含min函数的栈
  10. oc 画一个圆弧_UG建模一个蜗杆的方法,纯手工建模无插件