AssetsLibrary使用介绍

一、概述
  
  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];
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值