使用 PHImageManager 时,PHAsset 返回 UIImage 的 nil 值
Posted
技术标签:
【中文标题】使用 PHImageManager 时,PHAsset 返回 UIImage 的 nil 值【英文标题】:PHAsset is returning a nil value for the UIImage when using PHImageManager 【发布时间】:2019-10-18 18:05:00 【问题描述】:知道为什么在添加 requestImageOption 设置后会为“thisImage”返回 nil 吗?如果 options 设置为 nil,thisAsset 返回一个值,但它是低分辨率图像,绝对不是原始高分辨率图像。我正在尝试从 PHAsset (thisAsset) 返回原始图像
if let thisAsset:PHAsset = info[UIImagePickerController.InfoKey.phAsset] as? PHAsset
arrImageIdentifiers.append(thisAsset.localIdentifier)
let manager = PHImageManager.default()
let requestImageOption = PHImageRequestOptions()
requestImageOption.deliveryMode = PHImageRequestOptionsDeliveryMode.highQualityFormat
manager.requestImage(for: thisAsset, targetSize: PHImageManagerMaximumSize, contentMode: PHImageContentMode.default, options: requestImageOption, resultHandler: (thisImage, _) in
Object.tempImage = thisImage
print("Picture metadata: \(thisAsset)")
let creationDate = thisAsset.creationDate
PhotoMeta.createDate = creationDate
)
//Get a reference to the camera view controller and call the savePhoto method
let cameraVC = self.selectedViewController as? CameraViewController
if let cameraVC = cameraVC
cameraVC.savePhoto(image: Object.tempImage!)
【问题讨论】:
试试requestImageOption.isSynchronous = true
一次
@AnkitJayaswal 你能回答这个问题吗?成功了,谢谢
它可能看起来有效,但它是错误的。
【参考方案1】:
将 requestOptions 的 isSynchronus
设置为 true
以解决您的问题:
let requestImageOption = PHImageRequestOptions()
requestImageOption.deliveryMode = PHImageRequestOptionsDeliveryMode.highQualityFormat
requestImageOption.isSynchronous = true
manager.requestImage(for: thisAsset, targetSize: PHImageManagerMaximumSize, contentMode: PHImageContentMode.default, options: requestImageOption, resultHandler: (thisImage, _) in
//....
【讨论】:
错了。您不能在主线程上将此设置为同步。以上是关于使用 PHImageManager 时,PHAsset 返回 UIImage 的 nil 值的主要内容,如果未能解决你的问题,请参考以下文章
HighQualityFormat 的 PHImageManager.requestImageForAsset 从不调用 resultHandler
PHImageManager 中的图像数据与保存为资产的图像数据不同
使用 PHImageManager 导出视频文件失败:AVFoundationErrorDomain Code=-11800 "The operation could not be comp