フォトライブラリから画像名を取得していません。ここの誰かが画像名を取得する適切な方法を知っていますか?
注:PHAsset.fetchAssets(withALAssetURLs: [imageURL], options: nil)
これは非推奨です。
スウィフトのみ
ありがとう
私は方法を発見しました
if let asset = info["UIImagePickerControllerPHAsset"] as? PHAsset{
if let fileName = asset.value(forKey: "filename") as? String{
print(fileName)
}
}
これにより、フォトライブラリ内の実際のファイル名が返されます。
画像ファイル名のことですか?もしそうなら、これはあなたを助けるはずです。 UIImagePickerControllerDelegateで:
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
guard let fileUrl = info[UIImagePickerControllerImageURL] as? URL else { return }
print(fileUrl.lastPathComponent)
}
以下のコードで試してください
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
}
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)
}
フォトライブラリにアクセスする権限が付与されていない場合、UIImagePickerControllerPHAsset
はnil
です。 OSは自動的に要求せず、ファイルへのアクセスを提供します(これの背後にあるロジックが何であるかはわかりません!)が、PHAssetは情報辞書がゼロになります!
これをお試し下さい。
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)
}
正しい方法は次のとおりです。
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
を使用する場合、この権限は不要になりました。そのため、アプリに権限がない場合、OSは画像のコピーへの一時的なアクセスを許可します。これは、にフォールバックするだけです。パスURL。