使用ALAssetsLibrary读取所有照片

ALAssetsLibrary 访问系统相册实现多选 iOS 访问系统相册,并实现图片多选,使用了ALAssetsLibrary框架 立即下载
一.ALAssetsLibrary介绍
ALAssetsLibrary提供了访问iOS设备下”照片”应用下所有照片和视频的接口;
从ALAssetsLibrary中可读取所有的相册数据,即ALAssetsGroup对象列表;
从每个ALAssetsGroup中可获取到其中包含的照片或视频列表,即ALAsset对象列表;
每个ALAsset可能有多个representations表示,即ALAssetRepresentation对象,使用其defaultRepresentation方法可获得其默认representations,使用[asset valueForProperty:ALAssetPropertyRepresentations]可获取其所有representations的UTI数组。
从ALAsset对象可获取缩略图thumbnail或aspectRatioThumbnail;
从ALAssetRepresentation对象可获取全尺寸图片(fullResolutionImage),全屏图片(fullScreenImage)及图片的各种属性:orientation,dimensions,scale,url,metadata等。
其层次关系为ALAssetsLibrary -> ALAssetsGroup -> ALAsset -> ALAssetRepresentation。
注意:
The lifetimes of objects you get back from a library instance are tied to the lifetime of the library instance.
通过ALAssetsLibrary对象获取的其他对象只在该ALAssetsLibrary对象生命期内有效,若ALAssetsLibrary对象被销毁,则其他从它获取的对象将不能被访问,否则有会错误。
invalid attempt to access ALAssetPrivate past the lifetime of its owning ALAssetsLibrary
ALAssetRepresentation的metadata方法很慢,我在iPhone4 iOS5.1.1中测试,此方法返回需要40-50ms,所以获取图片的个各种属性尽量直接从ALAssetRepresentation中获取,不要读取metadata。
这里给出了一个此方法占用内存过多的解释,调用多次也确实很容易会memory warning,或许也能解析其为什么很慢吧。
The method [representation metadata] returns an autoreleased object and possibly creates more autoreleased objects when it executes. All these instances are added to the autorelease pool, waiting to be finally released (and their memory freed) when the ARP gets the chance to drain itself.
系统”相册”程序显示的图片是fullScreenImage,而不是fullResolutionImage,fullResolutionImage尺寸太大,在手机端显示推荐用fullScreenImage。

fullScreenImage已被调整过方向,可直接使用,即
[UIImage imageWithCGImage:representation.fullScreenImage];

使用fullResolutionImage要自己调整方法和scale,即
[UIImage imageWithCGImage:representation.fullResolutionImage scale:representation.scale orientation:representation.orientation];
二.创建 ALAssetsLibrary对象
使用ALAssetsLibrary之前需导入头文件和AssetsLibrary.framework。

#import 
...
ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc]init];
...
三.遍历Assets Group
使用enumerateGroupsWithTypes:usingBlock:failureBlock:方法可遍历assets group;
此方法为异步执行,若之前未被授权过,此方法会向用户请求访问数据的权限;若用户拒绝授权或其他错误则会执行failureBlock;
如果用户关掉了位置服务(Location Services,在设置->通用中),返回的错误为ALAssetsLibraryAccessGloballyDeniedError。
enumerationBlock和failureBlock与在调用此方法的线程内执行,若要在背景线程进行遍历,可将遍历代码放入GCD或NSOperation中。

    [assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
        if (!group) {
            [tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO];
        }else{
            [groupsArray addObject:group];
            ...
        }


    } failureBlock:^(NSError *error) {
        NSLog(@"error:%@",error);
    }];
四.遍历Assets Group中的Assets
使用enumerateAssetsUsingBlock:方法或者其他变体方法可遍历ALAssetsGroup中的所有ALAsset;
可通过setAssetsFilter:设置过滤器(ALssetsFilter)使enumerateAssetsUsingBlock:只返回特定类型asset,而numberOfAssets只返回特定类型asset的数量。
可以设置只显示Photo(allPhotos),只显示Video(allVideos),或显示全部(allAssets)。
enumerateAssetsUsingBlock:为同步方法,只有所有Asset遍历完才返回。所以需要将遍历代码放入背景线程,防止阻塞UI线程。


    [assetsGroup setAssetsFilter:[ALAssetsFilter allPhotos]];
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        [assetsGroup enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {
            if (!result) {
                [tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO];
            }else{
                [assetsArray addObject:result];
                ...
            }
        }];
    });
五.根据url获取asset
使用ALAssetsLibrary的assetForURL:resultBlock:failureBlock:方法,可根据之前从ALAssetRepresentation中获取的url重新获取ALAsset对象,此方法同enumerateGroupsWithTypes:usingBlock:failureBlock:一样为异步方法。
六.获取Assets的各种属性
相册封面图片 
[assetsGroup posterImage];
照片url
[[[asset defaultRepresentation] url] absoluteString];
照片缩略图

[asset thumbnail];

[asset aspectRatioThumbnail];
照片全尺寸图

[[asset defaultRepresentation] fullResolutionImage];
照片全屏图

[[asset defaultRepresentation] fullScreenImage];
照片创建时间

[asset valueForProperty:ALAssetPropertyDate];
照片拍摄位置(可能为nil)

[asset valueForProperty:ALAssetPropertyLocation];
照片尺寸

[[asset defaultRepresentation] dimensions];
点云特征提取的实战对比:Voxel-based 与 Pillar-based 在自动驾驶中的表现 本文深入对比了自动驾驶中点云特征提取的两种主流方法:Voxel-based与Pillar-based。Voxel-based方法通过三维体素化保留完整几何信息,检测精度高,但计算消耗大;Pillar-based方法将点云压缩为二维柱状特征图,牺牲部分垂直细节以换取极高的处理速度,更适合实时性要求高的量产场景。文章结合实战数据,为不同算力、精度与工程需求的场景提供了清晰的选型指南。 阅读详情

相关推荐

Ubuntu的初步环境配置(VMware)

4.屏幕显示不全解决完后,在试用Ubuntu里面,直接双击“安装Ubuntu 20.04.6 LTS”。如果不存在“屏幕显示不全”的问题,直接点击安装即可,大致安装步骤与以下步骤类似。15.点击现在重启,重启成功后,会出现“清除安装介质”的问题。19.此时点开火狐,可以上网,但只可输入英文,不可以输入中文,具体解决方法见3.2。3.进入安装界面,此时可能会出现“屏幕显示不全”的问题,具体解决方法见3.1。8.选择“正常安装”、“安装Ubuntu时下载更新”,点击继续。最后,点击保留更改,设置成功。

森菌蛙诺的博客 2274

ALAssetsLibrary使用

在iOS中,我们调用摄像头和选择相册中的资源,我们可以使用:UIImagePickerController类来完成。   当然,我们也可以不使用UI的形式来访问iOS设备的相册资源。 那就是使用:ALAssetsLibrary   一、ALAssetsLibrary是什么   可以说,是一个桥梁把。连接了我们应用程序和相册之间的访问。 ALAssetsLibrary提供了我们对iO...

weixin_34236497的博客 176

8.5/Q1,Charls最新高分文章解读!

8 257名受试者中,672人(8.14%)在9年内发生过卒中。在调整的多因素cox回归模型中,TyG和ABSI仍然是卒中的预测因素,TyG的HR为1.25(95%CI:1.06~1.47),ABSI的HR为1.33(95%CI:1.06~1.68)。TyG和ABSI联合诊断效能最高(AUC:0.579,95%CI:0.553~0.597),而TyG(AUC:0.566,95%CI:0.544~0.587)和ABSI(AUC:0.533,95%CI:0.524~0.597)的诊断效能最低。

gsky_sci的博客 1014

ALAssetsLibrary详解

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

kingsley_cxz的专栏 1万+

嵌入式下载故障排查:ST-LINK与GD32 Programmer典型问题解决

嵌入式固件烧录是MCU开发的关键环节,其本质依赖于调试器(如ST-LINK、GD-Link)与目标芯片间的协议通信、驱动加载及硬件接口协同。原理上,SWD/JTAG协议需在正确时序、电平与供电条件下完成设备枚举、ID读取与Flash编程;技术价值在于保障量产烧录稳定性与调试可重复性;典型应用场景涵盖STM32/GD32教学开发、工业控制板量产调试及Windows 11新系统适配。本文聚焦ST-LINK-V2在Keil MDK中的下载失败和GD32 All In One Programmer的DLL加载异常两

weixin_35006125的博客 153

汽车级智能栅极驱动器深度解析 | 连载01:DRV871x-Q1系列产品架构与核心特性

集成度:单芯片集成多通道驱动器、电源管理、电流检测智能化:自适应控制算法,减少外部元件可靠性:多重保护机制,满足汽车级要求灵活性:SPI和硬件两种接口,适应不同应用需求。

VehSwHwDeveloper的博客 1151

iOS的AssetsLibrary框架解读与应用

概述 iOS提供的AssetsLibrary框架是用来读取和操作本地相册的,连接了我们应用程序和相册之间的访问, 该框架提供一下6个类:ALAssetsLibrary,AssetsLibrary,ALAssetsGroup,ALAsset,ALAssetsFilter,ALAssetRepresentation。 ALAssetsLibrary ALAssetsLibrary类可以实现查看相

Ethan_LG的专栏 3781

Zabbix安装与部署 系统环境:centos7.0

Zabbix安装与部署 系统环境:centos7.0

weixin_42485027的博客 2600

【iOS开发】---- ALAsset,ALAssetsLibrary,ALAssetsgroup常见属性及用法

ALAsset

冻僵的企鹅'zone 2万+

OpenClaw简介--windows系统安装OpenClaw

在windows安装OpenClaw实现代替人工操作。步骤流程详细,图文并茂。

直到世界的尽头 5348

Cadence PSpice 仿真0:绘制电路图方法图文教程

在使用PSpice进行电路的仿真时,首先需要使用带有PSpice模型的元器件来绘制电路图,本文简单介绍进行电路图绘制是常用的几种需要掌握的方法,以满足PSpice仿真绘制简单电路图所用。

fydar的博客 4703

IOS7 第一次接触ALAssetsLibrary,简单介绍一下ALAssetsLibrary的作用

http://www.gowhich.com/blog/535 IOS7 第一次接触ALAssetsLibrary,简单介绍一下ALAssetsLibrary的作用 ALAssetsLibrary介绍 ALAssetsLibrary提供了访问iOS设备下”照片”应用下所有照片和视频的接口; 从ALAssetsLibrary中可读取所有的相册数据,即ALAsset

jeffasd的专栏 521

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

iOS中读取照片库

iOS中如果我们只有一次读取一张图片或者一个视频(或拍一张照片/视频)的需求,那么我们用 UIImagePickerController 就可以搞定。但是很多时候我们需要一次性从PhotoLibrary读取多个照片或者视频,这时候我们就需要另辟蹊径了,好在apple为我们提供了相应的接口。在开始coding之前我们想要认识几个类:ALAssetsLibrary:代表整个PhotoLibrary,我

潇洒的程序员 1万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

iOS相册访问 ALAssetsLibrary(获取到相册的图片)+ 图片格式

//通过创建ALAssetsLibrary 的实例可以访问系统Photos里的图片与视频。这个库包括了保存的图片,从iTunes导入的和从其他设备里面导入的图片,你可以访问所有的分类和保存图片视频。 //用普通的alloc和init就可以创建ALAssetsLibrary的实例,所有你从这个实例中获取得到的对象的生命周期和ALAssetsLibrary这个实例的生命周期一致 //大多数

Red_coralDown的专栏 1752

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

上一篇: xcode自带的svn无法上传“.a”(静态库)文件解决
下一篇: UIView 的 autoresizingMask 属性介绍
LIN1986LIN
博客等级 码龄19年 17粉丝 93原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值