使用Swift在iOS上本地保存和检索照片及其所有元数据

时间:2019-01-09 06:41:02

标签: ios swift uiimage swift4

我目前正在从用户的iPhone拍摄照片,将其制成jpeg,然后使用文件管理器进行保存,然后将其路径与核心数据一起保存。

我执行此操作的方式无法显示实时图像,也无法稍后将图像及其先前的元数据导出。

我的问题是将图像及其所有元数据和实时状态保存在本地的正确方法是什么,以便以后可以显示和导出图像,但只能在应用程序内部将其保存。我不希望这些图像在应用程序外部可行。

1 个答案:

答案 0 :(得分:0)

拍摄图像:

看看UIImagePickerController类并用它来拍照。以此拍照,不会自动将图像保存到iOS画廊。

提到的UIImagePickerController将通知委托人UIImagePickerControllerDelegate并调用函数func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String: Any])

从第二个参数信息字典中,您可以请求大多数图像元数据,livePhoto等。可以在名为UIImagePickerController的{​​{1}}扩展名内找到必要的密钥。

例如,如果可以的话,下面是我如何检索图像坐标的方法:

UIImagePickerController.InfoKey

将图片保存到应用内的手机上吗?:

我使用if let imageURL = info[UIImagePickerControllerReferenceURL] as? URL { let result = PHAsset.fetchAssets(withALAssetURLs: [imageURL], options: nil) if let asset = result.firstObject, let location = asset.location { let lat = location.coordinate.latitude let lon = location.coordinate.longitude print("Here's the lat and lon \(lat) + \(lon)") } } 。您可以使用此类来编码,然后再次解码自定义图像类。

您的具有UIImage和所有其他属性的自定义图像类必须随后实现JSONEncoder协议。 然后,使用Codable通过对象的JSONEncoder方法创建对象的Data,并在encode()的帮助下将其保存到应用程序的私有位置。 稍后,您可以使用FileManagerFileManagerdecode()再次从该位置读取所有文件,瞧,您将以自定义图像类的形式再次拥有所有图像。 / p>

将图像保存到用户库“正在导出”:

这是一个示例,说明我如何再次将该图像保存到用户库中,作为导出图像的方法:

JSONEncoder

我希望这足以指导您正确的方法。