0

I'm using UIImagePickerController to pick image i want path of selected image but I can't get it.

what I'm trying in code:

func handleImg() {
    let picker = UIImagePickerController()
    picker.delegate = self
    picker.allowsEditing = true
    present(picker, animated: true, completion: nil)
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    var selectedImageFromPicer : UIImage?
    if let editedImage = info["UIImagePickerControllerEditedImage"] as? UIImage {
        selectedImageFromPicer = editedImage
    } else if let originalImage = info["UIImagePickerControllerOriginalImage"] as? UIImage {

        selectedImageFromPicer = originalImage
    }

    if let selectedImage = selectedImageFromPicer {
        img.image = selectedImage
    }
    if let imageURL = info[UIImagePickerControllerReferenceURL] as? URL {

        let result = PHAsset.fetchAssets(withALAssetURLs: [imageURL], options: nil)
        let asset = result.firstObject
        var imgStr = asset?.value(forKey: "filename")
        print(imgStr!)
    }
    dismiss(animated: true, completion: nil)
    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
        print("canceled picker")
        dismiss(animated: true, completion: nil)
    }
}

By above code I can only get the name of image. I want path of image.

Eric Aya
  • 69,473
  • 35
  • 181
  • 253
Yash R
  • 247
  • 2
  • 19

2 Answers2

2

If you print the info object you will see all available keys for accessing the values of this dictionary. The image path key is UIImagePickerControllerImageURL

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    guard let imageUrl = info["UIImagePickerControllerImageURL"] as? URL else {
        return
    }
    print(imageUrl.path) // prints the path
    picker.dismiss(animated: true, completion: nil)
}
Au Ris
  • 4,541
  • 2
  • 26
  • 53
1

Following code may help you in get the image path.

Code to show UIImagePickerController.

@IBAction func showPicker(_ sender: Any) {

    let picker = UIImagePickerController()
    picker.delegate = self
    picker.sourceType = UIImagePickerControllerSourceType.savedPhotosAlbum
    picker.allowsEditing = false
    present(picker, animated: true, completion: nil)
}

Delegate method didFinishPickingMediaWithInfo.

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    let imageUrl          = info[UIImagePickerControllerReferenceURL] as! NSURL
    let imageName         = imageUrl.lastPathComponent
    let documentDirectory = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first!
    let photoURL          = NSURL(fileURLWithPath: documentDirectory)
    let localPath         = photoURL.appendingPathComponent(imageName!) 
    //Check these values

    self.dismiss(animated: true, completion: nil);

}
Saraswati
  • 1,516
  • 1
  • 14
  • 21