我可以检测导入的 ALAsset 照片是不是是通过屏幕截图拍摄的吗?

Posted

技术标签:

【中文标题】我可以检测导入的 ALAsset 照片是不是是通过屏幕截图拍摄的吗?【英文标题】:Can I detect if an imported ALAsset photo was taken via screenshot?我可以检测导入的 ALAsset 照片是否是通过屏幕截图拍摄的吗? 【发布时间】:2012-10-18 11:33:25 【问题描述】:

我有一个imagePickerController,用于将照片从库中导入我的应用程序。

ALAssetsLibraryAssetForURLResultBlock 时,我试图找出我在块中获得的 ALAsset 是作为屏幕截图拍摄的照片,还是由相机拍摄的“真实”照片。

我尝试浏览 ALAsset 的元数据字典,但找不到任何可能适合的标志/指示。

有人有什么想法吗?

【问题讨论】:

因为你需要检查照片的大小是 460*320 然后从屏幕截图中捕获照片我认为这是检测屏幕截图的唯一方法? @neonsamuel - 谢谢,但我认为我们不应该依赖尺寸(特别是当 iphone 5 的新比例在这里时......) 所以你需要再包含一个条件:-( 【参考方案1】:

对于屏幕截图,它的 UTI 总是一个“public.png”并且与屏幕大小相同(确保您在屏幕边界宽度和高度上乘以 [UIScreen scale]),只需检查这 2 个元数据,您就可以轻松识别屏幕截图。

【讨论】:

【参考方案2】:

元数据添加到UIImage,同时保存到照片库。 UIImage 的相同元数据可以用来知道它的截图是否。

参考Save_Photo_to_Album_with_Metadata

【讨论】:

谢谢,但我说的是由另一个应用程序(而不是我的..)拍摄的照片 - 我无法控制保存时写入的元数据..【参考方案3】:

嗯,我正在研究和试验.. 我找到的最接近的解决方案是基于 iPhone 屏幕截图不会产生 EXIF 记录(而所有其他生成的照片都会产生它们)这一事实。

因此,一旦在选择器中选择了一张照片,我将检查照片的元数据是否包含 EXIF 记录,如果不包含 - 我断定照片是屏幕截图。

我发现它是目前“尽善尽美”的解决方案,尽管它不是官方解决方案。

干杯。

【讨论】:

对于从网页保存的照片也可能没有 EXIF 元数据。

以上是关于我可以检测导入的 ALAsset 照片是不是是通过屏幕截图拍摄的吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 ALAsset 添加到照片流?

在 UIWebView img 标签中使用 ALAsset 照片

如何获取共享照片流 ALAsset 的 ALAssetRepresentation?

ALAsset defaultRepresentation fullResolutionImage

ALAsset 图像大小

加载缓慢时的 ALAsset 照片库图像性能改进