使用 UIImagePickerController 从 iPhone 相机获取图像路径 return nil

Getting image path from the iPhone camera Using UIImagePickerController return nil

我正在尝试使用 UIImagePickerController

从相机获取图像路径

这是代码:

 @IBAction func takePhoto(sender: UIButton) {
        imagePicker =  UIImagePickerController()
        imagePicker?.allowsEditing = true
        imagePicker?.delegate = self
        imagePicker?.sourceType = .Camera

        presentViewController(imagePicker!, animated: true, completion: nil)
    }

    func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
        let imageURL = info[UIImagePickerControllerReferenceURL] as? NSURL
        print(" Path \(imageURL)")
        imageView?.contentMode = .ScaleAspectFit
        imageView?.image = info[UIImagePickerControllerOriginalImage] as?        UIImage
        imagePicker?.dismissViewControllerAnimated(true, completion: nil)
    }

有什么帮助吗?

代理 didFinishPickingMediaWithInfo 在使用相机拍摄照片后被调用。 UIImagePickerControllerReferenceURL 对象将是 nil,因为图像尚未保存到相机胶卷。

要摆脱这种情况,需要先保存图片,然后使用保存路径的url。但是,您可以在 info 上使用 UIImagePickerControllerOriginalImage 属性 来在您的应用程序中显示拍摄的图像。希望这对您有所帮助!

我用这个方法保存相机拍摄的图像

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
    print(info)
    var selectedImage: UIImage!
    if let image = info[UIImagePickerControllerEditedImage] as? UIImage {
        selectedImage = image
    } else if let image = info[UIImagePickerControllerOriginalImage] as? UIImage {
        selectedImage = image
    }
    self.profileImageView.image = selectedImage

    if (picker.sourceType == UIImagePickerControllerSourceType.camera) {

        let imgName = UUID().uuidString
        let documentDirectory = NSTemporaryDirectory()
        let localPath = documentDirectory.appending(imgName)

        let data = UIImageJPEGRepresentation(selectedImage, 0.3)! as NSData
        data.write(toFile: localPath, atomically: true)
        let photoURL = URL.init(fileURLWithPath: localPath)


    }
}