如何获取 PHAsset 的原始(EXIF?)创建日期/时间?
Posted
技术标签:
【中文标题】如何获取 PHAsset 的原始(EXIF?)创建日期/时间?【英文标题】:How to get original (EXIF?) creation date/time of PHAsset? 【发布时间】:2017-06-19 15:55:08 【问题描述】: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 我想知道如何获取 UTC-6 日期/时间晚上 10:52。【问题讨论】:
【参考方案1】:您可以尝试使用PHContentEditingInput
。
iCloud 图像也可能会很慢,但值得一试,因为我认为没有其他方法可以做到这一点:(
这种方法不需要 ImageIO
导入并且需要更少的代码,所以它可能会比 PHImageManager requestImageDataForAsset
好一些
您可以使用此PHAsset
类别快速尝试:
https://github.com/zakkhoyt/PHAsset-Utility
【讨论】:
【参考方案2】:可以获取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
【讨论】:
以上是关于如何获取 PHAsset 的原始(EXIF?)创建日期/时间?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 PHAsset creationDate 与 exif 元数据不同?
与 UIActivitiViewController 共享图像(UIImage)的 PHAsset 丢失元数据(Exif 等)