注:-この質問はSwift 3.0のみですSwift 3.0へのパスprioを取得できます
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!)
しかし、このパスは私の画像を指していません。ドキュメントフォルダに画像がありません。
誰かがこれについて私を助けることができますか?
選択した画像のパスに直接アクセスすることはできません。それを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に1回だけ保存されます。
ここで、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)
}