找出 .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:kMDItemIsScreenCapture 或 com.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 文件是不是是屏幕截图?的主要内容,如果未能解决你的问题,请参考以下文章