我需要尽可能高效地处理和存储来自 PHImageManager 的图像数据。
为此,我需要获取 iOS 相册中的每个图像,以便我可以通过 CIImage 对象读取它,这样我就可以在单独的线程上为 CBIR 数据库应用过滤器和提取描述符。
不能使用[PHAsset requestContentEditingInput]
通过 URL 打开图像文件。它在技术上可以打开图像文件并读取它,但我运气不好,因为它强制回调进入主队列并且似乎依赖于将调用保留在主队列中。它会在处理后台队列上的多个图像后使应用程序崩溃,我相当确定该 API 仅用于编辑将在主队列中发生的会话。
PHImageManager 提供了一个requestImageDataForAsset
可以在后台线程上同步调用的 API。这似乎更适合需要处理图像而不充当交互式编辑工具的图像处理应用程序,这是我的确切用例。我还需要元数据,特别是图像的方向,这个 API 也返回。
问题是我找不到真正讨论这个 API 的信息。它说它将返回一个 NSData,但这并没有告诉我它将是位图 RBG 数据、JPEG 数据和其他有用的信息。
我想用这些数据创建一个 CIImage,但 API 没有给我像素格式、颜色空间或其他任何东西。我大概可以假设 RGB 和每个像素 3 个字节。但这可能是错误的。
有没有人使用过这个 API 并且可以解释它的行为?Apple 的 2014 年 WWDC 视频甚至都没有真正讨论它。