PhotoKit 照片库的管理-获取图像
PHAsset
部分属性解析
1、HDR 和全景照片
mediaSubtypes
属性验证资源库中的图像在捕捉时是否开启了 HDR,拍摄时是否使用了相机应用的全景模式。
2、收藏和隐藏资源
要验证一个资源是否被用户标记为收藏或被隐藏,只要检查 PHAsset
实例的 favorite
和 hidden
属性即可。
3、连拍模式照片
对于一个资源,如果其 PHAsset
的 representsBurst
属性为 true
,则表示这个资源是一系列连拍照片中的代表照片 (多张照片是在用户按住快门时拍摄的)。它还有一个属性是 burstIdentifier
,如果想要获取连拍照片中的剩余的其他照片,可以通过将这个值传入 fetchAssetsWithBurstIdentifier(...)
方法来获取。
用户可以在连拍的照片中做标记;此外,系统也会自动用各种试探来标记用户可能会选择的潜在代表照片。这个元数据是可以通过PHAsset
的 burstSelectionTypes
属性来访问。这个属性是用三个常量组成的位掩码:.UserPick
表示用户手动标记的资源,.AutoPick
表示用户可能标记的潜在资源,.None
表示没有标记的资源。
获取图像
static PHImageRequestOptions *requestOptions; if (!requestOptions) { requestOptions = [[PHImageRequestOptions alloc] init]; requestOptions.deliveryMode = PHImageRequestOptionsDeliveryModeOpportunistic; requestOptions.resizeMode = PHImageRequestOptionsResizeModeFast; } photoCell.requestID = [[PHImageManager defaultManager] requestImageForAsset:asset targetSize:CGSizeMake(CGRectGetWidth(photoCell.thumbView.frame) ,CGRectGetHeight(photoCell.thumbView.frame) ) contentMode:PHImageContentModeAspectFill options:requestOptions resultHandler:^(UIImage *result, NSDictionary *info) { photoCell.thumbView.image = result; }];
1、PHImageRequestOptions类用于定制请求。
上面的方法返回指定尺寸的图像,如果你仅仅指定必要的参数而没有对 options 进行配置的话,返回的图像尺寸将会是原始图像的尺寸。或者,你指定的尺寸很小,这时候会按照你的要求来返回接近该尺寸的图像。PHImageRequestOptions有以下几个重要的属性:
synchronous:指定请求是否同步执行。 默认为 NO,如果 synchronous 为 YES,即同步请求时,deliveryMode 会被视为 PHImageRequestOptionsDeliveryModeHighQualityFormat,即自动返回高质量的图片,因此不建议使用同步请求,否则如果界面需要等待返回的图像才能进一步作出反应,则反应时长会很长。
resizeMode:对请求的图像怎样缩放。有三种选择:None,不缩放;Fast,尽快地提供接近或稍微大于要求的尺寸;Exact,精准提供要求的尺寸。(resizeMode 默认是 None,这也造成了返回图像尺寸与要求尺寸不符。这点需要注意。要返回一个指定尺寸的图像需要避免两层陷阱:一定要指定 options 参数,resizeMode 不能为 None。)
deliveryMode:图像质量。有三种值:Opportunistic,在速度与质量中均衡;HighQualityFormat,不管花费多长时间,提供高质量图像;FastFormat,以最快速度提供好的质量。这个属性只有在 synchronous 为 true 时有效。
normalizedCropRect:用于对原始尺寸的图像进行裁剪,基于比例坐标。只在 resizeMode 为 Exact 时有效。
networkAccessAllowed :参数控制是否允许网络请求,默认为 NO,如果不允许网络请求,那么就没有然后了,当然也拉取不到 iCloud 的图像原件。(在 PhotoKit 中,对 iCloud 照片库有很好的支持,如果用户开启了 iCloud 照片库,并且选择了“优化 iPhone/iPad 储存空间”,或者选择了“下载并保留原件”但原件还没有加载好的时候,PhotoKit 也会预先拿到这些非本地图像的 PHAsset,但是由于本地并没有原图,所以如果产生了请求高清图的请求,PHotoKit 会尝试从 iCloud 下载图片,而这个行为最终的表现,会被 PHImageRequestOptions 中的值所影响。)
versions:这个属性是指获取的图像是否需要包含系统相册“编辑”功能处理过的信息(如滤镜,旋转等);
.Current 会递送包含所有调整和修改的图像;.Unadjusted 会递送未被施加任何修改的图像;.Original 会递送原始的、最高质量的格式的图像 (例如 RAW 格式的数据。而当将属性设置为 .Unadjusted 时,会递送一个 JPEG)。
2、progressHandler
还有一个与 iCloud 密切相关的属性 progressHandler,当图像需要从 iCloud 下载时,这个 block 会被自动调用,block 中会返回图像下载的进度,图像的信息,出错信息。开发者可以利用这些信息反馈给用户当前图像的下载进度以及状况,但需要注意 progressHandler 不在主线程上执行,因此在其中需要操作 UI,则需要手工放到主线程执行。
requestImageForAsset 中的参数 resultHandler 可能会被多次调用,这种情况就是图像需要从 iCloud 中下载的情况。在 requestImageForAsset 返回的内容中,一开始的那一次请求中会返回一个小尺寸的图像版本,当高清图像还在下载时,开发者可以首先给用户展示这个低清的图像版本,然后 block 在多次调用后,最终会返回高清的原图。至于当前返回的图像是哪个版本的图像,可以通过 block 返回的 NSDictionary info 中获知,PHImageResultIsDegradedKey 表示当前返回的 UIImage 是低清图。如果需要判断是否已经获得高清图,可以这样判断:
// 排除取消,错误,低清图三种情况,即已经获取到了高清图
BOOL
downloadFinined = ![[info objectForKey:PHImageCancelledKey] boolValue] && ![info objectForKey:PHImageErrorKey] && ![[info objectForKey:PHImageResultIsDegradedKey] boolValue];
图像是否必须从 iCloud 请求 (如果你初始化时将 networkAccessAllowed 设置成 false,那么就必须重新请求图像) —— PHImageResultIsInCloudKey 。
当前递送的 UIImage 是否是最终结果的低质量格式。当高质量图像正在下载时,这个可以让你给用户先展示一个预览图—PHImageResultIsDegradedKey。
请求 ID (可以便捷的取消请求),以及请求是否已经被取消 —— PHImageResultRequestIDKey 和 PHImageCancelledKey。
如果没有图像提供给 result handler,字典内还会有一个错误信息 —PHImageErrorKey。
这些值可以让你更新你的 UI 来告知用户,和上面讨论到的 progressHandler 一起,来表示出它们的加载状态。
[[PHImageManager defaultManager] cancelImageRequest:(PHImageRequestID)photoCell.requestID];
转载于:https://www.cnblogs.com/huaixu/p/6699368.html
PhotoKit 照片库的管理-获取图像相关推荐
- 使用UIImagePickerController从IPhone照片库或照相机获取图像
本文讲述使用3.0的方法怎样从iPhone的照片库或照相机获取图像. 我们将创建一个应用程序从图片库或照相机获取图像并显示与屏幕之上.下面是截图: 1. 创建一个新的 View Based 程序 我将 ...
- A_A07_003 AS608指纹模块上位机软件使用
A_A07_003 AS608指纹模块上位机软件使用 一.软件获取 二.测试用模块与接线 三.上位机界面分块和功能 1.指纹图像显示区域 2.硬件信息 3.打开设备 4.设备配置 5.信息显示 6.图 ...
- 查看、管理和修饰数码照片的利器:Windows照片库
查看.管理和修饰数码照片的利器:Windows照片库 数码相机和数码摄像机越来越普及了,几乎走入了每个家庭.因为拍摄方便,即拍即得,拍摄成本几乎为零,所以大部分用户都是大量.随意地进行拍摄,不知不觉中 ...
- 图片资源管理,实现多App统一图片库管理
前言 图片资源管理建立在App组件化基础之上,根据组件按需关联并下载图库资源中的图片,避免图片资源在不必要时加入到App中,增大包体积 一.如何实现按需下载组件图片? 按需建立图片资源和组件的依赖关系 ...
- [绍棠] PhotoKit介绍
PhotoKit是一套比AssetsLibrary更完整也更高效的库,而其处理方式也跟AssetsLibrary有很大的不同.该框架不仅支持照片的编辑,还提供了直接访问照片管理应用程序里的照片和视频资 ...
- 文档管理服务器文件的脱机编辑选项无法编辑,让MOSS2007文档的存取更具个性
首页 > 技术文章 让MOSS2007文档的存取更具个性 本文是一系列文章中的一篇,请参阅: 在MOSS2007中只以标题形式显示通知列表 在MOSS2007中如何将子网站显示在主页 让MOSS ...
- pb数据窗口显示图片_PowerPhotos帮助你再Mac系统上更好,更快的管理自己的图片...
PowerPhotos for Mac,一款专业的图片管理软件.这款软件能够让你直接浏览你的图片素材库,能够检测重复图片,能够让你快速删除多余的图片,从而帮助用户节省iCloud空间.同时,除了删除图 ...
- 使用Spring Boot,JHipster和React构建照片库PWA
"我喜欢编写身份验证和授权代码." 〜从来没有Java开发人员. 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证. 从本质上 ...
- 统一管理MOSS2010用户头像
我们都知道MOSS 2010里面的"我的网站"里面有一个上传照片功能,通过那里用户可以方便的上传自己的照片.也可以通过在AD里面上传用户的头像,通过MOSS的 User Profi ...
最新文章
- 二叉排序树的相关操作
- 你只使用到了 VS Code 20% 的功能?让 VS Code 首著作者带你玩转 VS Code!
- IDEA自动编译less文件输出css
- python内置函数表_python学习系列--python内置函数(一)
- linux中dhcp如何配置两个子网,linux – 配置DHCP服务器以在同一VLAN上为多个子网提供服务...
- 1.7编程基础之字符串_04石头剪子布
- java中key的作用_key word ‘final’ 在java 中作用
- MySQL创建价格_mysql 建表时的价格用什么类型定义?
- IDEA上传本地项目到SVN
- 国二c语言和南开100题,全国计算机二级C语言题库_南开100题.doc
- 国外、国内Hadoop的应用现状
- System.DateUtils Simple trimming functions部分
- 单片机学习记录:流水灯
- Github: fatal: Unsupported SSL backend ‘“openssl”‘. Supported SSL backends: openssl schannel
- 软件 黑苹果盒盖不休眠_怎么解决苹果电脑合盖自动休眠问题?
- 单目相机内参标定注意事项
- Office2010安装步骤
- cass里填充面怎么导入arcgis_ArcGIS与CASS在地籍建库中的结合应用视频课程(GIS思维)...
- 360极速版+刷火车票应用----Chrome内核刷票 + IE内核网银付款,完美解决Chrome内核网银支付问题
- Word 中的键盘快捷方式
热门文章
- python输入代码界面通常_vscode写python时的代码错误提醒和自动格式化的方法
- linux i2c adapter 增加设备_Linux驱动之I2C驱动架构
- 安装卡主_智能温室四周玻璃的安装学问还这么多
- PL/SQL Developer跑在Oracle 64位数据库上初始化错误
- c语言大乐透编译,Excel大乐透摇号vba代码分享,说不定就中百万了呢
- SIFT讲解(SIFT的特征点选取以及描述是重点)
- Vestigium-Google CodeJam 2020资格回合问题1解决方案
- HDFC的完整形式是什么?
- 博客上一些项目相关源码链接
- 实训09.09:简单的彩票系统(机选多注)