文档章节

ALAssetsLibrary获取所有图片

木木情深
 木木情深
发布于 2014/02/15 22:48
字数 552
阅读 100
收藏 1

通过创建ALAssetsLibrary 的实例可以访问系统Photos里的图片与视频。这个库包括了保存的图片,从iTunes导入的和从其他设备里面导入的图片,你可以访问所有的分类和保存图片视频。

 

用普通的alloc和init就可以创建ALAssetsLibrary的实例,所有你从这个实例中获取得到的对象的生命周期和ALAssetsLibrary这个实例的生命周期一致。

 

大多数的函数,都是异步处理的,所有的成功失败的回调都是使用block传入的,因为有可能需要用户点击授权。在iOS4至iOS5的版本中,会提示要访问用户的地理位置。到iOS6会提示访问用户的照片信息,这一点需要注意。

 

可以遍历Group,创建Group,创建图片,添加信息等,可以进行大多数的访问与操作。

 

可以通过valueForProperty获取到图片的信息,包括类型, Location , 时长,方向,日期,格式 , URL地址。

                             NSString * nsALAssetPropertyType = [ asset valueForProperty:ALAssetPropertyType ] ;

                             NSString * nsALAssetPropertyLocation = [ asset valueForProperty:ALAssetPropertyLocation ] ;

                             NSString * nsALAssetPropertyDuration = [ asset valueForProperty:ALAssetPropertyDuration ] ;

                             NSString * nsALAssetPropertyOrientation = [ asset valueForProperty:ALAssetPropertyOrientation ] ;

                             NSString * nsALAssetPropertyDate = [ asset valueForProperty:ALAssetPropertyDate ] ;

                             NSString * nsALAssetPropertyRepresentations = [ asset valueForProperty:ALAssetPropertyRepresentations ] ;

                             NSString * nsALAssetPropertyURLs = [ asset valueForProperty:ALAssetPropertyURLs ] ;

                             NSString * nsALAssetPropertyAssetURL = [ asset valueForProperty:ALAssetPropertyAssetURL ] ;

 

 

获取全部图片的示例:

//View Controller header(.h) file..

#import <UIKit/UIKit.h>

#include<AssetsLibrary/AssetsLibrary.h> 

 

@interface  getPhotoLibViewController : UIViewController

{

 ALAssetsLibrary *library;

 NSArray *imageArray;

 NSMutableArray *mutableArray;

}

 

-(void)allPhotosCollected:(NSArray*)imgArray;

 

@end

 

 

//implementation file

declare global count variable as

static int count=0;

 

@implementation getPhotoLibViewController

 

-(void)getAllPictures

{

 imageArray=[[NSArray alloc] init];

 mutableArray =[[NSMutableArray alloc]init];

 NSMutableArray* assetURLDictionaries = [[NSMutableArray alloc] init];

 

 library = [[ALAssetsLibrary alloc] init];

 

 void (^assetEnumerator)( ALAsset *, NSUInteger, BOOL *) = ^(ALAsset *result, NSUInteger index, BOOL *stop) {

  if(result != nil) {

   if([[result valueForProperty:ALAssetPropertyType] isEqualToString:ALAssetTypePhoto]) {

    [assetURLDictionaries addObject:[result valueForProperty:ALAssetPropertyURLs]];

 

    NSURL *url= (NSURL*) [[result defaultRepresentation]url]; 

 

    [library assetForURL:url

             resultBlock:^(ALAsset *asset) {

              [mutableArray addObject:[UIImage imageWithCGImage:[[asset defaultRepresentation] fullScreenImage]]];

 

              if ([mutableArray count]==count)

              {

               imageArray=[[NSArray alloc] initWithArray:mutableArray];

               [self allPhotosCollected:imageArray];

              }

             }

            failureBlock:^(NSError *error){ NSLog(@"operation was not successfull!"); } ]; 

 

   } 

  }

 };

 

 NSMutableArray *assetGroups = [[NSMutableArray alloc] init];

 

 void (^ assetGroupEnumerator) ( ALAssetsGroup *, BOOL *)= ^(ALAssetsGroup *group, BOOL *stop) {

  if(group != nil) {

   [group enumerateAssetsUsingBlock:assetEnumerator];

   [assetGroups addObject:group];

   count=[group numberOfAssets];

  }

 };

 

 assetGroups = [[NSMutableArray alloc] init];

 

 [library enumerateGroupsWithTypes:ALAssetsGroupAll

                        usingBlock:assetGroupEnumerator

                      failureBlock:^(NSError *error) {NSLog(@"There is an error");}];

}

 

-(void)allPhotosCollected:(NSArray*)imgArray

{

 //write your code here after getting all the photos from library...

 NSLog(@"all pictures are %@",imgArray);

}

 

@end

Use getAllPicture method to get photos from photo library.

 

 

参考文章:

1.ALAssetsLibrary Class Reference , https://developer.apple.com/library/ios/#documentation/AssetsLibrary/Reference/ALAssetsLibrary_Class/Reference/Reference.html

2. Get all of the pictures from an iPhone photoLibrary in an array using AssetsLibrary framework? -StackOverflow  http://stackoverflow.com/questions/12633843/get-all-of-the-pictures-from-an-iphone-photolibrary-in-an-array-using-assetslibr


本文转载自:http://www.cnblogs.com/liangxing/archive/2013/01/05/2846136.html

木木情深
粉丝 37
博文 189
码字总数 26451
作品 0
广州
程序员
私信 提问
iOS的AssetsLibrary框架访问所有相片

由于博客迁移至www.coderyi.com,文章请看http://www.coderyi.com/archives/424 该框架下有几个类,ALAssetsLibrary,ALAssetsGroup,ALAsset,ALAssetsFilter,ALAssetRepresentation。 ALAs......

flyicarus
2014/10/16
22.8K
1
ALAssetsLibrary用assetForURL:assetUrl resultBlock:^(ALAsset *asset)读取图片。Block执行顺序

ALAssetsLibrary *lib = [[ALAssetsLibrary alloc] init]; [lib assetForURL:assetUrl resultBlock:^(ALAsset *asset) { ALAssetRepresentation *assetRep = [asset defaultRepresentation];......

JSNS
2016/02/18
728
0
ALAssetsLibrary详解

ALAssetsLibrary类是代表系统中整个资源库,使用它可以访问资源库中的资源和保存照片,视频等功能。 library = [[ALAssetsLibrary alloc]init]; //判断当前应用是否能访问相册资源 /* typed...

木木情深
2014/02/15
208
0
聊聊ALAssetsLibrary 与 Photos

和都是Apple提供访问系统相册资源的两个标准库,前者在iOS9之后已经被弃用,后者在iOS8上开始支持。可想而知,库提供了更全面更友好的接口。 本文通过对比两者的用法来系统地学习一下“iOS访...

foolishBoy
2017/10/25
0
0
IOS笔记之-保存图片

第一部分:保存到系统相册 IOS保存图片功能只有一句话:UIImageWriteToSavedPhotosAlbum([erweima image], nil, nil,nil); 一般来说这就够了,但有的时候需要根据保存反馈来进行下一步操作,...

断水殇
2016/06/06
57
0

没有更多内容

加载失败,请刷新页面

加载更多

Linux 运行shell文件,出现 $'\r': command not found

运行编写的shell脚本时,出现了 $'\\r': command not found 这样的错误提示。 报错的原因是我们在windows系统操作时,编辑器里的换行符是\r\n ,而Linux上为\n,两个系统之间有差异导致的。 ...

芥末无敌
今天
7
0
Java数据结构(上)

枚举(Enumeration) 位集合(BitSet) 向量(Vector) 栈(Stack) 1.Enumeration(枚举) boolean hasMoreElements( ):测试是否有更多的元素 Object nextElement( ):如果此枚举对象至少还...

Firefly-
昨天
11
0
vue 跨层组件通讯 provide inject

https://cn.vuejs.org/v2/api/#provide-inject 类型: provide:Object | () => Object inject:Array<string> | { [key: string]: string | Symbol | Object } 详细: provide 和 inject 主......

阿豪boy
昨天
7
0
黑马程序员面试宝典(Java)Beta6.0免费下载

场景 JavaSE基础 面向对象特征以及理解 访问权限修饰符区别 理解clone对象 JavaSE语法 java有没有goto语句 &和&&的区别 如何跳出当前的多重嵌套循环? 是否可以继承String? 重载与重写的区别...

badaoliumang
昨天
9
0
监控linux系统状态

查看系统负载: w/uptime 最后面三个数字表示1分钟,5分钟,15分钟平均有多少个进程占用CPU 占用CPU的进程可以是Running,也可以是Waiting 某一时刻1颗CPU只能有一个进程在使用其资源 #查看c...

asnfuy
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部