ios13使用PHImageManager获取原始图像

Posted

技术标签:

【中文标题】ios13使用PHImageManager获取原始图像【英文标题】:ios13 get original image using PHImageManager 【发布时间】:2019-08-26 12:51:51 【问题描述】:

ios 13 PHImageManagerMaximumSize 上不起作用。

打电话时

let manager = PHImageManager.default()
let option = PHImageRequestOptions()
option.isSynchronous = synchronous
option.isNetworkAccessAllowed = true
option.resizeMode = .exact

manager.requestImage(for: asset, targetSize: PHImageManagerMaximumSize, contentMode: .aspectFill, options: option, resultHandler: (result, info) in
)

requestImage 返回错误: 错误域=NSCocoaErrorDomain 代码=-1 "(null)"

此代码在 ios12 上运行良好

能否告诉我如何在 ios13 上获取原始图像?

【问题讨论】:

我遇到了同样的情况,尽管当我请求缩略图大小的图像时它起作用了。事实上,如果您指定 PHImageManagerMaximumSize 以外的任何大小,它都会起作用。也许这是 targetSize 问题?顺便说一句,我不认为这是弃用 API 的问题。即使在 iOS13 设备上使用 iOS12 SDK 构建代码也是如此。 【参考方案1】:

引用自 Apple 文档here:

当您使用 PHImageManagerMaximumSize 选项时,照片会为资源提供可用的最大图像,而无需缩放或裁剪。 (也就是说,它忽略了resizeMode 选项。)

但在这种情况下,resizeMode 似乎对 iOS 13 有效。

resizeMode 设置为.none 使PHImageManagerMaximumSize 按预期工作。

【讨论】:

它也适用于 .fast resizeMode。我们只在使用 .exact 时看到问题。 对于那些发现此解决方案不起作用的人,请尝试将 option.isSynchronous 设置为 true。 谢谢@The1993。我只有在将 option.isSynchronious 设置为 true 后才设法解决它【参考方案2】:

尝试requestImageDataForAsset,即使它被标记为已弃用。 您还应该将 iOS 13 上的 requestImage 问题作为错误报告给 Apple。

【讨论】:

【参考方案3】:

对于那些在 iOS 13 上请求原始图像仍有问题的用户,请尝试改用 requestImageDataAndOrientation。

The docs建议这是请求原始图像数据的正确方法。如果需要,它会返回 NSData,您可以使用它创建 UIImage。

【讨论】:

【参考方案4】:

requestImageDataForAsset 已弃用。 zoption.isSynchronous = Yes` 在 iOS 13 中不起作用。

【讨论】:

已弃用并不意味着它不再起作用。这意味着您更喜欢使用一个新的 API,它可能会在 iOS 13 的未来版本中被删除。在我的测试中,requestImageDataForAsset 在 iOS 13 中仍然可以完全正常工作。

以上是关于ios13使用PHImageManager获取原始图像的主要内容,如果未能解决你的问题,请参考以下文章

从 PHAsset swift 5 IOS13 获取文件名

iOS中获取系统相册中的图片

使用 PHImageManager 时,PHAsset 返回 UIImage 的 nil 值

PHImageManager.default().requestAVAsset 用于视频

PHImageManager 在许多图像请求后崩溃

滚动浏览数千张图片时,PHImageManager 的 requestImage 会锁定 UI