首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何快速获取摄像机拍摄的图像路径

如何快速获取摄像机拍摄的图像路径
EN

Stack Overflow用户
提问于 2017-06-13 13:19:36
回答 3查看 8K关注 0票数 5

我使用imagePickerController(_ gallery : UIImagePickerController,didFinishPickingMediaWithInfo委托方法)获取用户在照片库上选择的图像的url。但是当我试图获取由相机拍摄的图像的URL时,它会返回nill。这是我的密码。

代码语言:javascript
复制
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
        if (imagePicker.sourceType == UIImagePickerControllerSourceType.camera) {
            let data = UIImagePNGRepresentation(pickedImage)
            UIImageWriteToSavedPhotosAlbum(pickedImage, nil, nil, nil)

            if let image = info[UIImagePickerControllerOriginalImage] as? UIImage {
                let imageURL =  info[UIImagePickerControllerReferenceURL] as? NSURL
                print(imageURL)
            }
        }
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-06-13 13:37:24

您所拍摄的图像尚未保存,也没有任何名称。您需要保存图像,然后才能获得图像的路径。这就是为什么它返回nil

如果您从图像库中选择一个图像,而不是用相机拍摄一个图像,那么您将得到一条路径。

票数 3
EN

Stack Overflow用户

发布于 2019-12-12 01:03:09

Rashwan的答案对我也有效,我无法用UIImageToSavedPhotoAlbum保存图像,所以编写了CameraImageManager类方法来保存、加载和获取上传图像的URL。您也可以将其作为Image和URL的扩展

代码语言:javascript
复制
class CameraImageManager {

   static func saveImage(imageName: String, image: UIImage) {

        guard let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first else { return }

        let fileName = imageName
        let fileURL = documentsDirectory.appendingPathComponent(fileName)
        guard let data = image.jpegData(compressionQuality: 1) else { return }

        //Checks if file exists, removes it if so.
        if FileManager.default.fileExists(atPath: fileURL.path) {
            do {
                try FileManager.default.removeItem(atPath: fileURL.path)
                print("Removed old image")
            } catch let removeError {
                print("couldn't remove file at path", removeError)
            }

        }

        do {
            try data.write(to: fileURL)
        } catch let error {
            print("error saving file with error", error)
        }

    }

    static func getImagePathFromDiskWith(fileName: String) -> URL? {

        let documentDirectory = FileManager.SearchPathDirectory.documentDirectory

        let userDomainMask = FileManager.SearchPathDomainMask.userDomainMask
        let paths = NSSearchPathForDirectoriesInDomains(documentDirectory, userDomainMask, true)

        if let dirPath = paths.first {
            let imageUrl = URL(fileURLWithPath: dirPath).appendingPathComponent(fileName)
            return imageUrl
        }

        return nil
    }

   static func loadImageFromDiskWith(fileName: String) -> UIImage? {

        let documentDirectory = FileManager.SearchPathDirectory.documentDirectory

        let userDomainMask = FileManager.SearchPathDomainMask.userDomainMask
        let paths = NSSearchPathForDirectoriesInDomains(documentDirectory, userDomainMask, true)

        if let dirPath = paths.first {
            let imageUrl = URL(fileURLWithPath: dirPath).appendingPathComponent(fileName)
            let image = UIImage(contentsOfFile: imageUrl.path)
            return image

        }

        return nil
    }

}
票数 1
EN

Stack Overflow用户

发布于 2017-06-13 13:36:30

将图像保存到Photos相册后,可以在响应回调中获得路径。

代码语言:javascript
复制
func saveImage(image: UIImage, completion: @escaping (Error?) -> ()) {
   UIImageWriteToSavedPhotosAlbum(image, self, #selector(image(path:didFinishSavingWithError:contextInfo:)), nil)
}

@objc private func image(path: String, didFinishSavingWithError error: NSError?, contextInfo: UnsafeMutableRawPointer?) {
    debugPrint(path) // That's the path you want
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44522756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档