无法从存储在照片库中的屏幕截图 png 文件中获取创建日期
Posted
技术标签:
【中文标题】无法从存储在照片库中的屏幕截图 png 文件中获取创建日期【英文标题】:Cannot get creation date from screenshot png file stored in Photo Library 【发布时间】:2018-03-22 19:32:36 【问题描述】:我正在尝试使用 phphotoLibrary 获取存储在照片库中的图片的创建日期。该代码适用于所有图片,除了通过单击主页和电源按钮在手机上创建为屏幕截图的几个 PNG 文件。当我遍历 PHFetchResult 并加载 CIImage 时,PNG 文件不包含 TIFF 字典,其中包含所有其他 JPG 文件的创建日期。我已经广泛搜索了***,发现了类似的问题,但还没有找到解决方案。我尝试以不同的方式加载文件,并且还在 Build Settings 中将 compress PNG files 设置设置为 NO。当我在 PHFetchResult 中遍历名为 pic 的 PHAsset 时,PNG 图像属性返回一个只有五个元素且没有 TIFF 字典的字典。 JPG 文件都返回一个更大的字典,包括 TIFF 字典,我可以在其中找到创建日期。这是我当前的代码,它为 PNG 文件返回一个空的 pictiff 字典:
[imagemanager requestImageDataForAsset:pic options:ro resultHandler:^(NSData * _Nullable imageData, NSString * _Nullable dataUTI, UIImageOrientation orientation, NSDictionary * _Nullable info)
CIImage *ciimage = [CIImage imageWithData:imageData];
NSMutableDictionary *exif = [NSMutableDictionary dictionary];
[exif addEntriesFromDictionary:ciimage.properties];
// Get file name
NSURL *picpath = [info objectForKey:@"PHImageFileURLKey"];
NSString *myfilename = [picpath lastPathComponent];
// Get creation date
NSDictionary *pictiff = exif[@"TIFF"];
NSString *picdate = pictiff[@"DateTime"];
非常感谢有关获取这些 PNG 文件的创建日期的帮助。
部署目标 8.0、Xcode 7.3.1、iPhone 6、ios 8.4
【问题讨论】:
使用pngcheck
或类似程序检查任何元数据。如果没有,那么唯一的“日期”在 OS 文件数据中。
没有 (AFAIK) 以 PNG 格式存储 Exif (TIFF) 数据的标准方法(如果建议,'eXIf'
,但它不在 W3C/ISO 标准中,因此不多用过的)。不过,如果 XMP 数据存在(在带有 'XML:com.adobe.xmp'
关键字的 'iTXt'
块中),您可能会从 XMP 数据中获得相同的信息。
【参考方案1】:
好吧,我希望我可以从同一个对象中获取所有图片的文件名和创建日期,但我做不到。我仍然不知道为什么 PNG 文件中没有 TIFF 字典,所以我使用了这些答案:
获取创建日期:How to get photo creation date in objective c
获取文件名:iOS8 Photos Framework: How to get the name(or filename) of a PHAsset?
【讨论】:
以上是关于无法从存储在照片库中的屏幕截图 png 文件中获取创建日期的主要内容,如果未能解决你的问题,请参考以下文章