2016-11-16 14 views
2

UIImagepickercontrollerからファイル名を取得したいのですが、iOS 9でデリケートされているので、ALAssetLibraryを使いたくないです。使用方法を教えてください。以下のコードを使用しましたが、imagenameを返すのはそれぞれのファイルに対して常にAsset.jpgです。Assetライブラリを使用してuiimagepickercontrollerでファイル名を取得する方法は?

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {  
    let originalImage = (info[UIImagePickerControllerOriginalImage] as? UIImage)! 
    let url = info[UIImagePickerControllerReferenceURL] as! NSURL 
    imageData = UIImageJPEGRepresentation(originalImage, 100) as NSData? 
    let data = UploadData() 
    data.fileName = url.lastPathComponent  
    picker.dismiss(animated: true, completion: nil) 
    } 

答えて

10

私はあなたがイメージの名前を取得するにはPhotosフレームワークを使用することをお勧めしますが、以下の

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { 
    if let imageURL = info[UIImagePickerControllerReferenceURL] as? URL { 
     let result = PHAsset.fetchAssets(withALAssetURLs: [imageURL], options: nil) 
     let asset = result.firstObject 
     print(asset?.value(forKey: "filename")) 

    } 

    dismiss(animated: true, completion: nil) 
} 
+2

* PHAsset.fetchAssets(withALAssetURLs:[imageURL]、options:nil)*はiOS 11ではサポート対象外です。 –

+3

このコードはios 11.0.3で動作しません。任意のソリューションですか? –

1

以下のようにします。

私はそれがあなたを助けると確信しています。

ここでは、選択したイメージをドキュメントディレクトリに保存し、ドキュメントディレクトリからこれらのイメージにアクセスします。

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) { 
    let imageURL = info[UIImagePickerControllerReferenceURL] as NSURL 
    let imageName = imageURL.path!.lastPathComponent 
    let documentDirectory = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).first as String 
    let localPath = documentDirectory.stringByAppendingPathComponent(imageName) 
    let image = info[UIImagePickerControllerOriginalImage] as UIImage 
    let data = UIImagePNGRepresentation(image) 
    data.writeToFile(localPath, atomically: true) 
    let imageData = NSData(contentsOfFile: localPath)! 
    let photoURL = NSURL(fileURLWithPath: localPath) 
    let imageWithData = UIImage(data: imageData)! 
    picker.dismissViewControllerAnimated(true, completion: nil) 
} 
5

これは私の作品filenameに依存することなく、選択した画像の名前を取得するためのコードですキー(:)力アンラップoptionalsのために言い訳してください)

extension ConversationDetailViewController : UIImagePickerControllerDelegate, UINavigationControllerDelegate { 
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { 
     guard let image = info[UIImagePickerControllerEditedImage] as? UIImage else { 
      DDLogDebug("No image chosen") 
      return 
     } 

     let url = info[UIImagePickerControllerReferenceURL] as! URL 
     let assets = PHAsset.fetchAssets(withALAssetURLs: [url], options: nil) 
     let fileName = PHAssetResource.assetResources(for: assets.firstObject!).first!.originalFilename 

     DDLogDebug("File name = \(fileName)") 

     dismiss(animated: true) 
    } 
} 
0

インポート写真

func getFileName(info: [String : Any]) -> String { 

    if let imageURL = info[UIImagePickerControllerReferenceURL] as? URL { 
     let result = PHAsset.fetchAssets(withALAssetURLs: [imageURL], options: nil) 
     let asset = result.firstObject 
     let fileName = asset?.value(forKey: "filename") 
     let fileUrl = URL(string: fileName as! String) 
     if let name = fileUrl?.deletingPathExtension().lastPathComponent { 
     print(name) 
     return name 
     } 
    } 
    return "" 

} 

はそうのような "didFinishPickingMediaWithInfo" メソッドの内部でそれを呼び出す:

let fileName = getFileName(info: info) 
0

あなたはあなたのInfor.plist

にこのNSPhotoLibraryUsageDescriptionを追加していることを確認しますiOSの11

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

    picker.dismiss(animated: true, completion: nil) 
} 

のためにこれを試すことができます

+0

ios 11.0.3でコードを使用してファイル名を取得できません。任意のソリューションですか? –

+0

NSPhotoLibraryUsageDescriptionのキーワードと値をInfo.plistに追加しましたか?システムポップアップが表示されたら、デバイスからの許可要求を承認します。 –

+0

はい。私はinfo.plistで与えている –

関連する問題