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

Posted

技术标签:

【中文标题】找出 .png 文件是不是是屏幕截图?【英文标题】:Find out if .png file is a screenshot?找出 .png 文件是否是屏幕截图? 【发布时间】:2012-07-19 07:40:57 【问题描述】:

当我使用以下代码获取特定文件的属性时:

NSFileManager *fileManager = [NSFileManager defaultManager];
NSDictionary *attributes = [fileManager attributesOfItemAtPath:p error:nil];

有没有属性可以判断是不是截图?

现在我正在使用这段尴尬的代码:

if ([fileExtension isEqualToString:@"png"]) 
  NSMutableArray *separatetFilename;
  separatetFilename = [NSMutableArray arrayWithArray:[fileName componentsSeparatedByString:@" "]]; /* screenshots have multiple spaces in their names, I split them up to use the information */

  if ([separatetFilename count] == 4)  /* screenshots names have 4 parts when splittet by spaces */
    if ([[separatetFilename objectAtIndex:0] isEqualToString:@"Bildschirmfoto"])  /* Bildschirmfoto = Screenshot in German */
      /* Do Something */
    
  

使用此解决方案,我必须为“屏幕截图”字符串输入本地化字符串...我搜索了纪录片,但没有找到任何东西。是否有“isScreenshot”标志或我可以阅读的内容?

【问题讨论】:

【参考方案1】:

您的问题“是否有“isScreenshot”标志或我可以阅读的内容?答案是“是”。

我知道有两种方法可以得到答案:

a) 询问 NSFile~Manager

b) 请求元数据。

你已经用过:

NSFileManager *fileManager = [NSFileManager defaultManager];
NSDictionary *attributes = [fileManager attributesOfItemAtPath:p error:nil];

如果您现在查看这本字典的键,例如与

NSLog( @"the keys: %@", [attributes allKeys] );

你会找到键@"NSFileExtendedAttributes*"。此键的值是带有 com.apple.metadata:kMDItemIsScreenCapturecom.apple.metadata:kMDItemScreenCaptureType 或 ...等键的字典。这就是你问的为了。相应的值是具有二进制属性列表的 NSData 对象。评估这些 plist 会给出类似 1(它是一个屏幕截图)和 window 用于窗口屏幕截图或 selection 用于窗口的一部分。

可以通过以下方式查看元数据:

    MDItemRef item = MDItemCreate( kCFAllocatorDefault, (CFStringRef)p );

如果您只需要上述值,请创建一个带有相应键的列表(一个 NSArray):

NSArray *ary = [NSArray arrayWithObjects:
     @"kMDItemIsScreenCapture", @"kMDItemScreenCaptureType", nil];
NSDictionary *dict =
    (NSDictionary *)MDItemCopyAttributes( item, (CFArrayRef)ary );

并测试它返回的内容;

NSLog( @"the metadata are %@", dict );

在这种情况下,返回值是 __NSCFBoolean(即 NSNumber)和 __NSCFString(即 NSString),这比二进制 plist 更易于使用。

【讨论】:

非常非常感谢!我以为我在调试时看到了这个属性,但找不到了。非常感谢!

以上是关于找出 .png 文件是不是是屏幕截图?的主要内容,如果未能解决你的问题,请参考以下文章

adb(10)-屏幕截图/录制

无法从存储在照片库中的屏幕截图 png 文件中获取创建日期

屏幕截图

使用adb命令对手机屏幕截图

使用adb命令对手机屏幕截图

Java屏幕截图并另存为PNG