如何从使用库或相机拍摄的 UIImagePickerControllerPHAsset 获取图像名称?

Posted

技术标签:

【中文标题】如何从使用库或相机拍摄的 UIImagePickerControllerPHAsset 获取图像名称?【英文标题】:How to get image name from UIImagePickerControllerPHAsset taken with library or camera? 【发布时间】:2017-10-26 10:13:06 【问题描述】:

我想从 ios 11.0.3 中的 UIImagePickerControllerPHAsset 获取文件名。无法使用此代码获取选取的图像文件名。请帮忙?

  if #available(iOS 11.0, *) 
                let asset = info[UIImagePickerControllerPHAsset] as? PHAsset
                fileName = ((asset?.value(forKey: "filename")) as? String)!
             else 
                // Fallback on earlier versions
                let url = info[UIImagePickerControllerReferenceURL] as! URL
                let assets = PHAsset.fetchAssets(withALAssetURLs: [url], options: nil)
                fileName = PHAssetResource.assetResources(for: assets.firstObject!).first!.originalFilename
            

在 fileName = ((asset?.value(forKey: "filename")) as?String) 上发生崩溃!

【问题讨论】:

【参考方案1】:

Apple 似乎没有将新的 iOS 11 密钥添加到信息字典中。因此,iOS 11 代码将无法正常工作,因为它一直返回 nil。看这个开雷达http://www.openradar.me/34404703

到目前为止,我发现的唯一解决方案是即使在 iOS 11 中也使用 iOS 10 代码块,而忽略 UIImagePickerControllerReferenceURL deprecated 消息(密钥仍然存在并且在 iOS 11 中有效)

希望对你有帮助

【讨论】:

如果您有权从库中读取照片(请参阅phphotoLibrary),则此键的值应为非空。 它是nil,因为你没有获得权限所以首先,你需要检查PHPhotoLibrary.authorizationStatus(),如果应用程序有权限,它将返回值。【参考方案2】:

你可以试试这个……

if #available(iOS 11.0, *) 
                let asset = info[UIImagePickerControllerPHAsset] as! PHAsset
                var resources = PHAssetResource.assetResources(for: asset)
                var orgFilename = (resources[0]).originalFilename
                print("File Name: ",orgFilename)
            

【讨论】:

'UIImagePickerControllerPHAsset' 已重命名为 'UIImagePickerController.InfoKey.phAsset'【参考方案3】:

如果您有权访问用户的照片库,您将能够实际从UIImagePickerController 获得PHAsset 值。 UIImagePickerController 似乎不会代表您请求权限,因此您需要自己执行此操作。

请参阅Determine if the access to photo library is set or not - PHPhotoLibrary,了解有关如何检查和请求权限的相关讨论。

【讨论】:

嘿,谢谢。我今晚去看看:)

以上是关于如何从使用库或相机拍摄的 UIImagePickerControllerPHAsset 获取图像名称?的主要内容,如果未能解决你的问题,请参考以下文章

如何从使用 pdfkit 相机拍摄的图像创建 pdf

如何从相机连续拍摄两张照片?

如何使用opencv查找从相机拍摄的图像中可用的面部数量?

如何从相机捕获多张图像并使用位图将其编码为字符串?

如何在android中保存从相机拍摄的图像

使用 ACTION_IMAGE_CAPTURE 从相机拍摄照片后如何跳过或避免“重拍并查看”选项