【问题标题】:How do you get image file name from UIImagePickerController?如何从 UIImagePickerController 获取图像文件名?
【发布时间】:2018-04-25 01:49:42
【问题描述】:

我没有从照片库中获取图像名称。 这里有人知道获取图像名称的正确方法吗?

注意:PHAsset.fetchAssets(withALAssetURLs: [imageURL], options: nil) 已弃用。

仅限斯威夫特

谢谢

【问题讨论】:

标签: ios iphone swift uiimagepickercontroller


【解决方案1】:

我找到了方法

if let asset = info["UIImagePickerControllerPHAsset"] as? PHAsset{
            if let fileName = asset.value(forKey: "filename") as? String{
            print(fileName)
            }
        }

这将返回照片库中的实际文件名。

【讨论】:

  • 但在我的情况下它不起作用,资产总是返回 nil。
  • 是的,现在 info 不提供“UIImagePickerControllerPHAsset”键。
  • 在尝试访问 PhAsset 信息之前,您需要获得照片权限
  • 如何获得许可?我已经添加了隐私 - 照片库使用说明
【解决方案2】:

你是指图片文件名吗?如果是这样,这应该对您有所帮助。在你的 UIImagePickerControllerDelegate 中:

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    guard let fileUrl = info[UIImagePickerControllerImageURL] as? URL else { return }
    print(fileUrl.lastPathComponent)
}

【讨论】:

  • lastPathComponent 会返回系统设置的临时文件名
  • 检查我的答案。这将为您返回确切的文件名。我也检查了 mac 上的文件名,并返回了正确的文件名
【解决方案3】:

iOS 12、Swift 4 的更新,

这将直接为您提供文件名和文件扩展名

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {

    guard let fileUrl = info[UIImagePickerController.InfoKey.imageURL] as? URL else { return }
    print(fileUrl.lastPathComponent) // get file Name
    print(fileUrl.pathExtension)     // get file extension
    dismiss(animated: true, completion: nil)
}

【讨论】:

  • 此代码运行良好,请在投票前尝试该代码。
  • 刚试过,这对相机拍摄的照片不起作用:)。
【解决方案4】:

试试下面的代码

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    if let asset = info[UIImagePickerControllerPHAsset] as? PHAsset {
        if let fileName = (asset.value(forKey: "filename")) as? String {
          print(\(fileName))
        }
    }

    // Other Stuff
}

【讨论】:

    【解决方案5】:

    UIImagePickerControllerPHAssetnil 如果您没有授予访问照片库的权限。操作系统不会自动询问,仍然会让您访问该文件(我不知道这背后的逻辑是什么!)但 PHAsset 是信息字典将为零!

    【讨论】:

      【解决方案6】:

      正确的做法是:

      func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        var imageName = "image_1"
        if let asset = info[.phAsset] as? PHAsset, let fileName = asset.value(forKey: "filename") as? String {
          imageName = fileName
        } else if let url = info[.imageURL] as? URL {
          imageName = url.lastPathComponent
        }
      }
      

      PHAsset 将是 nil 如果用户没有授予您的应用访问库的权限。如果您使用默认的UIImagePickerController,则不再需要此权限,因此如果您的应用程序没有这些权限,操作系统将为您提供对图像副本的临时访问权限,您所能做的就是回退到路径 URL。

      【讨论】:

        【解决方案7】:

        请试试这个。

        func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
            if let asset = info[UIImagePickerControllerPHAsset] as? PHAsset {
                let assetResources = PHAssetResource.assetResources(for: asset)
                print(assetResources.first!.originalFilename)
            }
        
            dismiss(animated: true, completion: nil)
        } 
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-12
          • 1970-01-01
          • 1970-01-01
          • 2018-05-08
          • 2012-06-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多