iOS,如何知道照片是不是是用户截取的屏幕截图?如何删除照片中的照片?
Posted
技术标签:
【中文标题】iOS,如何知道照片是不是是用户截取的屏幕截图?如何删除照片中的照片?【英文标题】:iOS, How to know whether a photo is a screenshot taken by user? How to delete photos in Photos?iOS,如何知道照片是否是用户截取的屏幕截图?如何删除照片中的照片? 【发布时间】:2016-09-26 08:55:27 【问题描述】:在AppStore(中国),一款名为腾讯手机管家的App发布了一系列与照片相关的功能,包括检测照片是否为用户截图、删除照片等。
我在这里截取了这个应用程序的截图来演示我的问题(我自己为你添加了英文文本,因为该应用程序只显示中文):
This app knows what photos are screenshots and what not
当你点击底部的删除按钮时,它会显示:
Asking permission from user to delete photos
据我所知,ios 中的 Photo API(AssetsLibrary、phphotoLibrary)并没有给出照片的绝对路径,而且 iOS SandBox 也不允许应用删除用户的资产,这使得删除用户的照片几乎不可能的。 iOS 设备中保存的所有照片都遵循相同的命名系统:“IMG_001.jpg”,这使得无法从其名称中检测照片是否为截图。
但显然,这个应用程序实现了这两个功能。有人对此有任何想法吗?
谢谢!
【问题讨论】:
【参考方案1】:对于屏幕截图,它的 UTI 总是一个“public.png”并且与屏幕大小相同(确保您在屏幕边界宽度和高度上乘以 [UIScreen scale]),只需检查这 2 个元数据,您就可以轻松识别屏幕截图。
希望对你有帮助
【讨论】:
感谢您的回答。 UTI 指的是什么?顺便说一句,我从我的 mac 发送了几张图片(全部重新调整为 640*1136,在我的情况下为 iPod Touch 6)到我的 iPod,看看它们将如何分类。我通过捕获我的mac屏幕创建的那些被归类到截图相册中,但我从网络获得的那些则不是。 iOS相册和腾讯手机管家的结果是一样的。【参考方案2】:您可以使用 PHAsset 的 mediaSubtypes
属性进行检查。
let types = phAsset.mediaSubtypes /// phAsset is a PHAsset
let isScreenshot = types.contains(.photoScreenshot) /// true if is screenshot
【讨论】:
以上是关于iOS,如何知道照片是不是是用户截取的屏幕截图?如何删除照片中的照片?的主要内容,如果未能解决你的问题,请参考以下文章
以编程方式截取 iOS 中另一个应用程序的整个可滚动区域的屏幕截图