Search code examples
iosswiftuiimagepickercontrollerphasset

Not getting image path


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.


Solution

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