web-dev-qa-db-ja.com

UIImagePickerControllerから画像ファイル名を取得するにはどうすればよいですか?

フォトライブラリから画像名を取得していません。ここの誰かが画像名を取得する適切な方法を知っていますか?

注:PHAsset.fetchAssets(withALAssetURLs: [imageURL], options: nil)これは非推奨です。

スウィフトのみ

ありがとう

4
Akshay Sood

私は方法を発見しました

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

これにより、フォトライブラリ内の実際のファイル名が返されます。

7
Akshay Sood

画像ファイル名のことですか?もしそうなら、これはあなたを助けるはずです。 UIImagePickerControllerDelegateで:

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

以下のコードで試してください

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
}
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)
}
1
Ankit

フォトライブラリにアクセスする権限が付与されていない場合、UIImagePickerControllerPHAssetnilです。 OSは自動的に要求せず、ファイルへのアクセスを提供します(これの背後にあるロジックが何であるかはわかりません!)が、PHAssetは情報辞書がゼロになります!

1
AXE

これをお試し下さい。

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)
} 
0
user8324856

正しい方法は次のとおりです。

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
  }
}

ユーザーがアプリにライブラリにアクセスする権限を与えていない場合、PHAssetnilになります。デフォルトのUIImagePickerControllerを使用する場合、この権限は不要になりました。そのため、アプリに権限がない場合、OSは画像のコピーへの一時的なアクセスを許可します。これは、にフォールバックするだけです。パスURL。

0
aramusss