使用swift在iOS上本地保存和检索包含所有元数据的照片
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用swift在iOS上本地保存和检索包含所有元数据的照片相关的知识,希望对你有一定的参考价值。
我目前正在从iPhone用户制作jpeg照片,然后使用文件管理器保存它们,然后用核心数据保存它们的路径。
我的方式我无法显示实时图像或以后导出图像与其以前的元数据。
我的问题是在本地保存图像及其所有元数据和实时状态的正确方法是什么,以便稍后可以显示和导出,但仅限于应用内部。我不希望图像在应用程序之外可行。
拍摄图像:
看看UIImagePickerController
类并用它来拍照。使用此功能拍照,不会将图像自动保存到ios图库中。
提到的UIImagePickerController
将通知代表UIImagePickerControllerDelegate
并调用函数func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String: Any])
。
从第二个参数,即信息字典,您可以请求大部分图像元数据,livePhoto等。必要的键可以在UIImagePickerController
的扩展名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)")
}
}
将图像保存到应用内的手机上?:
我用JSONEncoder
。您可以使用此类对您的自定义图像类进行编码然后再解码。
您的自定义图像类具有UIImage和所有其他属性,然后必须实现Codable
协议。然后,使用JSONEncoder
通过其Data
方法创建对象的encode()
,并在FileManager
的帮助下将其保存到app私有位置。稍后,您可以使用FileManager
再次阅读该位置的所有文件,使用decode()
来查看JSONEncoder
,然后以自定义图像类的形式再次显示所有图像。
将图像保存到用户库“导出”:
以下是我再次将该图像保存到用户库中作为导出方式的示例:
private static func saveImageToGallery(picture: UIImage, lat: Double?, lon: Double?) {
phphotoLibrary.shared().performChanges({
let request = PHAssetCreationRequest.creationRequestForAsset(from: picture)
if let _lat = lat, let _lon = lon {
request.location = CLLocation(latitude: _lat, longitude: _lon)
}
})
}
我希望这足以引导你找到正确的方法。
以上是关于使用swift在iOS上本地保存和检索包含所有元数据的照片的主要内容,如果未能解决你的问题,请参考以下文章
在 iOS 中使用 Swift 保存 PDF 文件并显示它们