使用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上本地保存和检索包含所有元数据的照片的主要内容,如果未能解决你的问题,请参考以下文章

如何在swift中将json数组保存和检索到用户默认值?

使用 swift 将数组保存和检索到用户默认值

在 iOS 中使用 Swift 保存 PDF 文件并显示它们

使用 getdatainbackground 从 Parse 检索多个图像(IOS - Swift)

Swift GeoPoint 获取所有用户位置 ios

如何在不使用 transform.Rotate 的情况下在其本地或世界轴上旋转带有第二个四元数的四元数?