ios - Swift 4 didFinishPickingMediaWithInfo 保存图像

标签 ios swift swift4 uiimagepickercontroller

我正在使用 UIImagePickerController 像这样使用我的相机:

@objc func toggle() {
        if UIImagePickerController.isSourceTypeAvailable(.camera) {

            //Define UIImagePickerController variable

            let imagePicker = UIImagePickerController()

            //Assign the delegate

            imagePicker.delegate = self

            //Set image picker source type

            imagePicker.sourceType = .camera

            //Allow Photo Editing

            imagePicker.allowsEditing = true

            //Present camera

            UIApplication.topViewController()?.present(imagePicker, animated: true, completion: nil)
        }
    }

现在我正在 try catch 使用 didFinishPickingMediaWithInfo 方法拍摄的图像,我在网上得到了这个例子:

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

        let imageUrl          = info[UIImagePickerControllerOriginalImage] as! NSURL
        let imageName         = imageUrl.lastPathComponent
        let documentDirectory = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first!
        let photoURL          = NSURL(fileURLWithPath: documentDirectory)
        let localPath         = photoURL.appendingPathComponent(imageName!)
        let image             = info[UIImagePickerControllerOriginalImage]as! UIImage
        let data              = UIImagePNGRepresentation(image)

        do
        {
            try data?.write(to: localPath!, options: Data.WritingOptions.atomic)
        }
        catch
        {
            // Catch exception here and act accordingly
        }

        UIApplication.topViewController()?.dismiss(animated: true, completion: nil);
    }

但我将 UIImagePickerControllerReferenceURL 更改为 UIImagePickerControllerOriginalImage,因为 UIImagePickerControllerReferenceURL 为零。但在我改变之后,我得到了这个 fatal error :

Could not cast value of type 'UIImage' (0x1b6b02b58) to 'NSURL'

如何保存从相机拍摄的图像?我做错了什么?

最佳答案

如下所示编写代码,这将为您提供图像。

let image = info[UIImagePickerControllerOriginalImage] as! UIImage

UIImagePickerControllerOriginalImage 返回图片而不是 NSURL

编写以下代码以在 iOS 11 中获取图片 url。从 iOS 11 开始,UIImagePickerControllerImageURL 可用,之前有 UIImagePickerControllerMediaURL 键来获取图片 url。

if #available(iOS 11.0, *) {
    if let imageURL = info[UIImagePickerControllerImageURL] as? URL {
        print(imageURL)
    }
} else {
    if let imageUrl = info[UIImagePickerControllerMediaURL] as? URL {
        print(imageUrl)
    }
}

希望对您有所帮助。

关于ios - Swift 4 didFinishPickingMediaWithInfo 保存图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49369220/

相关文章:

ios - 无法使用 Parse 缩放 ScrollView 中的 UIImage

java - 具有 associatedtype 协议(protocol)的数组

swift 4 : Escaping closures can only capture inout parameters explicitly by value

safari - WKWebView 目标 ="_blank"链接在 safari ios11、swift 4 中打开新标签

ios - 容器 View 中的 UICollectionView

ios - 如何在corePlote中制作圆形图例?

ios - 如何格式化这样的坐标?

ios - Swift iOS 背景色 View animation as Timer

ios - 我想在单个 View Controller 中使用两个 TableView 。但最终的返回类型应该是什么?

swift - 您将如何根据其值类型过滤 swift 字典?