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