gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 10:54:34 26 4
gpt4 key购买 nike

我目前正在从用户的 iPhone 上拍摄照片,将其制作为 jpeg,然后使用文件管理器保存它们,然后使用核心数据保存它们的路径。

按照我的方式,我无法显示实时图像,也无法稍后导出图像及其之前的元数据。

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

最佳答案

拍摄图像:

看一下 UIImagePickerController 类并使用它来拍照。用它拍照,不会自动将图像保存到 iOS 图库中。

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

从第二个参数info字典中,您可以请求大部分图像元数据、livePhoto等。必要的键可以在名为 UIImagePickerController.InfoKeyUIImagePickerController 扩展内找到。

例如,以下是我检索图像坐标(如果可用)的方法:

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 协议(protocol)。然后,使用 JSONEncoder 通过其 encode() 方法创建对象的 Data 并将其保存到应用程序私有(private)位置一个文件管理器。稍后,您可以使用 FileManagerdecode() 使用 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)
}
})
}

我希望这足以引导您走上正确的道路。

关于ios - 使用 swift 在 iOS 上本地保存和检索照片及其所有元数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54104482/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com