如何获得PHAsset的原始(EXIF?)创建日期/时间?



PHAsset有一个creationDate属性,该属性以 UTC 格式提供资产的创建日期。

如果我拍摄在 UTC-6 晚上 10:52 拍摄的照片,则creationDate属性是上午 03:52。

我应该如何知道所拍摄照片的"真实"时间?creationDate属性没有提供时区信息,所以我无法将其调整回晚上 10:52 - 我不知道调整时要做什么时区......

我知道我可以使用PHImageManager requestImageDataForAsset获取 EXIF 创建日期(或至少尝试)并使用那里返回的数据来获取实际上是晚上 10:52 的 EXIF 创建日期,但这会导致照片在 iCloud 中时性能非常慢(我需要用户库中的所有资产的创建日期值)。 此外,我无法弄清楚如何获取视频的EXIF创建日期。

我也知道有一些方法可以从CLLocation获取时区,我可以用来调整creationDate- 但这些方法要么速率限制和/或不准确

有没有另一种更简单的方法可以获取此原始创建日期值?

回顾一下:

  • 照片拍摄于 UTC-6 中晚上 10:52
  • PHAsset 创建日期是 UTC 中上午 03:52
  • 我想知道如何获取 10:52 PM UTC-6 日期/时间。

您可以尝试使用PHContentEditingInput. 对于iCloud图像来说,它也可能很慢,但值得一试,因为我认为没有任何其他方法可以做到这一点:(

这种方法不需要导入ImageIO并且需要更少的代码,所以也许它会比PHImageManager requestImageDataForAsset

您可以使用此PHAsset类别快速试用: https://github.com/zakkhoyt/PHAsset-Utility

可以获取 exif 详细信息如下:

let options = PHContentEditingInputRequestOptions()
asset.requestContentEditingInput(with: options) { input, _ in
guard let url = input?.fullSizeImageURL else { return }
guard let image = CIImage(contentsOf: url) else { return }
guard let exif = image.properties["{Exif}"] as? [String: Any] else { return }
print(exif["DateTimeOriginal"] ?? "")
print(exif["SubsecTimeDigitized"] ?? "")
}

这将打印:

2021:01:04 11:47:07

177

最新更新