使用 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 值的主要内容,如果未能解决你的问题,请参考以下文章

ios13使用PHImageManager获取原始图像

HighQualityFormat 的 PHImageManager.requestImageForAsset 从不调用 resultHandler

PHImageManager 在许多图像请求后崩溃

PHImageManager 中的图像数据与保存为资产的图像数据不同

使用 PHImageManager 导出视频文件失败:AVFoundationErrorDomain Code=-11800 "The operation could not be comp

PHImageManager.default().requestAVAsset 用于视频