ALAssetsLibrary获取所有图片

2023-11-03

通过创建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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ALAssetsLibrary获取所有图片 的相关文章

  • 各种代理IP背后的原理

    讲解各种代理IP背后的原理 知道代理IP的人越来越多了 不管是单纯的换IP 还是进行大量的数据采集 或者是游走于灰色之中 都是离不开代理IP这个工具的 但是很少人会关注各种代理IP背后的原理 今天就听小编来给大家普及下吧 一 代理类型代理I
  • Python 数组教程 – 定义、索引、方法

    在本文中 您将学习如何使用 Python 数组 您将了解如何定义它们以及对它们执行操作常用的不同方法 本文介绍了您通过导入array module 我们不会在这里讨论 NumPy 数组 目录 什么是 Python 数组 Python 列表和
  • 【单目标优化算法】杂草优化算法(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现 1 概述 杂草算法代码简单 易于实现 具有较强的自适
  • postman系列-使用变量

    事先声明 以下内容 均来自于postman官网 仅做学习会用 侵删 如果想系统的学习postman 也推荐官网直接学习 谢谢 作用 在请求中和脚本中 使用变量可以存储值和重用值 将值存储在变量中 就可以在collections enviro
  • 静态变量与非静态变量的区别

    静态变量的类型说明符是static 非静态变量反而类型说明符就不是static了 本文主要介绍静态和非静态变量的区别 希望对你有帮助 一起来看 AD 静态变量 静态变量使用 static 修饰符进行声明在所属类被装载时创建通过类进行访问所属
  • 数据结构 每日一练 :选择 + 编程

    目录 选择 编程 选择 A 正确 B 不正确 答案 A 解析 多维数组是一维数组的扩展 也就是数组的数组 例如二维数组可以看作是一维数组作为数据元素构成的一维数组 三维数组可以看作二维数组作为元素构成的一维数组 数组与线性表的关系 数组是线
  • 大学排行榜

    def read file file m 读文件中的学校名到列表中 返回排名前m学校集合 ls if file alumni txt with open file r encoding utf 8 as data for line in d

随机推荐