使用swift在iOS上本地保存和检索包含所有元数据的照片

问题描述 投票:0回答:1

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

我的方式我无法显示实时图像或以后导出图像与其以前的元数据。

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

ios swift uiimage swift4
1个回答
0
投票

拍摄图像:

看看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)
                }
            })
        }

我希望这足以引导你找到正确的方法。

© www.soinside.com 2019 - 2024. All rights reserved.