无法从存储在照片库中的屏幕截图 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 文件中获取创建日期的主要内容,如果未能解决你的问题,请参考以下文章

给定路径中的 UI 自动化商店屏幕截图

UICollectionView 与从照片中获取的数据源 - 大量照片的缓慢更新

如何获取 tkinter 窗口的屏幕截图

找出 .png 文件是不是是屏幕截图?

如何从离子3中的firebase-storage获取图像

iOS,如何知道照片是不是是用户截取的屏幕截图?如何删除照片中的照片?