问题标签 [photosframework]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios8 - iOS 8 照片框架:从 PHAsset 获取文件名
有没有办法从 iOS 8 中的 PHAsset 对象获取文件名,就像 ALAsset 的 defaultRepresentation 提供文件名一样?
注意:这可以在 iOS9 中使用PHAssetResource类来完成。但我正在寻找 iOS8 和记录的方式(请不要使用未记录的 API)。
我确实在 SO 上找到了同样的问题,但没有找到令人信服的答案,所以我想单独问一下。
任何指针将不胜感激。
ios - 在后台线程上使用 CIDetector 和其他 Core Image API 时崩溃
为了进一步研究这个问题,我删除了关于这个主题的最后一个问题。
我正在开发一个基于内容的图像检索数据库,该数据库为 iPhone 上的本地相册编制索引。我编写了特征提取的过滤器和方法,但作为预处理步骤,我使用 CIDetector 检测面部矩形并通过局部二进制模式过滤器过滤这些矩形并提取小矩形的直方图。
该过程显然会花费大量时间来索引大型相册,因此我将其设计为异步的,并使用后台线程运行过滤器并提取特征。
这样做的问题是访问相册图像的唯一方法似乎是通过 PHAsset。有两个常用的 API,它们都需要回调块。其中一个检索 UIImage 表示,这不是我想要的,主要是因为我需要加载其中的许多并且内存限制很紧,我根本不打算显示图像。它还将返回一个对象字典,其中一个是图像文件本身的 URL,但 using+[CIImage imageWithContentsOfURL]
将返回 nil,并且 iOS 控制台将显示在使用此 API 时对图像的权限被拒绝。
另一个是-[PHAsset requestContentEditingInputWithOptions]
。这个特定的 API 将强制回调块在主队列中被调用,无论哪个队列调用 API,回调块总是被分派到主队列中。使用此 API,可以使用 成功加载 CIImage +[CIImage imageWithContentsOfURL]
,这意味着 API 已有效地授予访问文件的权限。然后,我可以将 CIImage 放在将执行所有索引处理步骤的不同队列中。
这种方法似乎有效,但只持续了很短的时间。最终应用程序崩溃了,我所看到的只是在之前的处理过程中出现了一条消息,上面写着Connection to assetsd was interrupted or assetsd died
.
如果我不在另一个队列上排队操作,只是让它在 API 强制回调进入的主队列上运行,那么一切都很好,并且该消息不会显示在控制台中。但这让我的主线程一直忙于进行非常昂贵的图像处理。
编辑:我突然想到我可能误用了这个 API,但它似乎是唯一能以适当格式为我提供我想要的数据的东西(一个 CIImage,可用于从文件中加载像素数据)必要的,在处理过程中)。
我目前使用的 API 可能更适合交互式图像过滤会话,其中图像编辑数据与 UI 一起使用,并且管理它的服务保持与应用程序的会话打开。
ios - 如何使用来自 PHImageManager 的图像数据
我需要尽可能高效地处理和存储来自 PHImageManager 的图像数据。
为此,我需要获取 iOS 相册中的每个图像,以便我可以通过 CIImage 对象读取它,这样我就可以在单独的线程上为 CBIR 数据库应用过滤器和提取描述符。
不能使用[PHAsset requestContentEditingInput]
通过 URL 打开图像文件。它在技术上可以打开图像文件并读取它,但我运气不好,因为它强制回调进入主队列并且似乎依赖于将调用保留在主队列中。它会在处理后台队列上的多个图像后使应用程序崩溃,我相当确定该 API 仅用于编辑将在主队列中发生的会话。
PHImageManager 提供了一个requestImageDataForAsset
可以在后台线程上同步调用的 API。这似乎更适合需要处理图像而不充当交互式编辑工具的图像处理应用程序,这是我的确切用例。我还需要元数据,特别是图像的方向,这个 API 也返回。
问题是我找不到真正讨论这个 API 的信息。它说它将返回一个 NSData,但这并没有告诉我它将是位图 RBG 数据、JPEG 数据和其他有用的信息。
我想用这些数据创建一个 CIImage,但 API 没有给我像素格式、颜色空间或其他任何东西。我大概可以假设 RGB 和每个像素 3 个字节。但这可能是错误的。
有没有人使用过这个 API 并且可以解释它的行为?Apple 的 2014 年 WWDC 视频甚至都没有真正讨论它。
ios - 从照片库中删除资产
我已经开始处理文档目录和照片库。到目前为止,我能够做的事情是:
将文件保存在“照片”中。
从“照片”中获取文件。
从文档目录访问文件。
- 从文档目录保存文件。
现在我面临的问题是从“照片”库中删除资产。怎么做?
我在 Apple 文档中读到我应该使用“PHAssetCollectionChangeRequest”类。所以我写了以下代码:
但它什么也没做。我可以得到一些代码吗?
ios - 如何像 ALAssetsLibrary 一样使用 PHPhotoLibrary
对于 iOS9,ALAssetsLibrary
已弃用。那么如何将其更改为PHPPhotoLibrary
而不是ALAssets
?
// 我试过这个,但没用
ios - 照片框架中 ALAsssetsLibrary 的assetForURL:resultBlock:failure 的等效方法是什么?
我正在使用图片来挑选图片,UIImagePickerController
但我还需要图片的名称和其他元数据信息。我可以在选择图像后ALAsssetsLibrary’s
assetForURL:resultBlock:failure
提供的 referenceURL 的帮助下使用方法获取图像资产,UIImagePickerController
但该方法/框架在 iOS9 中已弃用。我搜索了它的等效方法,Photos Framework
但没有找到。
让我知道它的等效方法或任何其他使用Photos Framework
.
ios - 照片框架:UICollectionView 滚动抖动
我正在使用 Photos 框架并且requestImageForAsset:
花费了太多时间,因此它的滚动性能确实很差。
我尝试将PHImageRequestOptions
选项设置为:
滚动变得完全平滑(所以我知道这是唯一的原因),但对于FastFormat
交付选项,缩略图仍然模糊,resultHandler:
只会被调用一次,图像质量会下降。
目前我正在使用以下代码(滚动不良):
鉴于问题出在上述方法中,任何人都知道如何提高滚动性能?
任何指针将不胜感激。
ios - 为什么使用照片框架的示例应用程序在每次更改后都使用 stopCachingImagesForAllAssets?
所以我在这里查看照片 API 和 Apple 的示例代码 https://developer.apple.com/library/ios/samplecode/UsingPhotosFramework/Introduction/Intro.html 并在此处快速转换为 https://github.com /ooper-shlab/SamplePhotosApp-Swift
我已将代码集成到我的项目中,以便在我拍照时 collectionView 从库中成功更新自身。有一个怪癖:有时单元格是空白的,并且它似乎连接到每次在 photoLibraryDidChange 委托方法结束时更新库时 Apple 调用的 stopCachingImagesForAllAssets。
我可以删除这条线并解决问题,但肯定有苹果把它放在那里的原因吗?我关心内存使用情况。
ios - 如何从 Photos 框架中的assetURL 获取 PHAsset?
我想使用assetURL 获取PHAsset。我使用了以下代码:
file.filePath 具有我从中获取的资产 url
但我总是得到fetchResult
as的价值nil
。有人能告诉我我哪里出错了吗?是因为我传递了错误的 URL 类型吗?
ios - CGImageDestinationFinalize 崩溃
我的应用程序允许用户使用照片框架编辑照片。我看到一些崩溃报告,生成输出图像时似乎发生了崩溃,但我不确定问题出在哪里。此崩溃发生在多个硬件设备和多个版本的 iOS 9 上,包括最新的 9.1。我的应用程序发出的最后一次调用是CGImageDestinationFinalize
为了创建已编辑的图像NSData
。崩溃报告显示,在看起来像是 GLTextureManager 的崩溃发生之前,CoreImage 空间中的调用会继续。
这可能是内存不足的问题吗?你看到问题了吗?如何解决?
相关代码来自PhotoEditor.swift
, 内部调用fullImageOutput
的函数editSingleAsset
在后台队列上运行QOS_CLASS_UTILITY
:
崩溃报告详细信息: