web-dev-qa-db-ja.com

Swift 3.0UIImagePickerControllerから選択されたUIImageのURLを取得する

注:-この質問は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!)

しかし、このパスは私の画像を指していません。ドキュメントフォルダに画像がありません。

誰かがこれについて私を助けることができますか?

6
Mayank Jain

選択した画像のパスに直接アクセスすることはできません。それを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変数にアクセスしてパスに移動すると、画像が表示されます。

注:
ここでデバイスを使用している場合は、デバイスのコンテナをダウンロードし、そのパッケージの内容を表示して、保存した画像が保存されているドキュメントディレクトリに移動する必要があります。

12

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