Swift 3.0 Получение URL-адреса UIImage, выбранного из UIImagePickerController

Примечание:- Этот вопрос только для Swift 3.0, я могу получить путь до Swift 3.0.

Я хочу получить путь UIImage, выбранный в методе didFinishPickingMediaWithInfo

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!)

Но этот путь не указывает на мое изображение, даже если в папке "Документы" нет изображения.

Может ли кто-нибудь помочь мне в этом?

2 ответа

Вы не можете получить доступ к пути выбранного изображения напрямую. Вам нужно сохранить это в вашей DocumentsDirectory, а затем вернуть изображение обратно с путем.

Сделай это

Swift 3.x

 func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {

    let image = info[UIImagePickerControllerOriginalImage] as! UIImage
    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!)

    if !FileManager.default.fileExists(atPath: localPath!.path) {
        do {
            try UIImageJPEGRepresentation(image, 1.0)?.write(to: localPath!)
            print("file saved")
        }catch {
            print("error saving file")
        }
    }
    else {
        print("file already exists")
    }
}

Также обратите внимание, что вы используете имя в качестве последнего компонента пути, который одинаков для каждого файла. Таким образом, это сохранит ваше изображение в DocumentDirectory только один раз, так как он найдет путь в следующий раз.

Теперь, когда вы получите доступ к переменной localPath и перейдете к пути, вы найдете изображение.

НОТА:
Если вы используете устройство здесь, вам нужно скачать контейнер устройства, показать содержимое пакета и перейти в каталог документов, где вы найдете сохраненное изображение.

В SWIFT 4 U можете попробовать это, он работает правильно.

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {


    if let imgUrl = info[UIImagePickerControllerImageURL] as? URL{
        let imgName = imgUrl.lastPathComponent
        let documentDirectory = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first
        let localPath = documentDirectory?.appending(imgName)

        let image = info[UIImagePickerControllerOriginalImage] as! UIImage
        let data = UIImagePNGRepresentation(image)! as NSData
        data.write(toFile: localPath!, atomically: true)
        //let imageData = NSData(contentsOfFile: localPath!)!
        let photoURL = URL.init(fileURLWithPath: localPath!)//NSURL(fileURLWithPath: localPath!)
        print(photoURL)

    }

    APPDEL.window?.rootViewController?.dismiss(animated: true, completion: nil)
}
Другие вопросы по тегам