使用照片框架按图片大小过滤照片库

Posted

技术标签:

【中文标题】使用照片框架按图片大小过滤照片库【英文标题】:Filtering photo library by picture size with Photos framework 【发布时间】:2015-06-22 22:16:19 【问题描述】:

我正在构建 ios 应用程序以从用户的照片库中选择屏幕截图。该应用程序有效,除了我可以显示所有照片并且我只需要屏幕截图。为了检测屏幕截图,我想将图像尺寸与屏幕尺寸相匹配。

var userScreenshots: PHFetchResult!

let screenWidth = view.bounds.size.width * 2
let screenHeight = view.bounds.size.height * 2

let options = PHFetchOptions()
// Following line needs to be changed —>
options.predicate = NSPredicate(format: "(pixelWidth & %d) != 0 || (pixelHeight & %d) != 0", screenWidth, screenHeight)

options.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: true)]

userScreenshots = PHAsset.fetchAssetsWithOptions(options)

崩溃:

2015-06-22 23:00:24.540 Altershot[95046:24515142] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unsupported predicate in fetch options: pixelWidth & 0 != 0'

请解释如何正确定义这个谓词。

【问题讨论】:

你想在你的谓词中选择什么? 只有特定宽度和高度的照片。 (pixelWidth == %d AND pixelHeight == %d) ?而且我建议您不要使用“* 2”,而是使用比例因子(iPhone 6 Plus 不应该通过,我认为 iPad mini 也是) @Larme 代码不再崩溃,但结果为空。我会接受规模建议,谢谢。 "(pixelWidth == %d AND pixelHeight == %d) OR (pixelWidth == %d AND pixelHeight == %d)" screenWidth, screenHeight , screenHeight, screenWidth?可能是方向问题。 【参考方案1】:

这是正确的代码。请注意,这不是幻数2,而是scale 通用属性,因为iPhone 6 Plus 的比例为3。我还包括风景截图,感谢 cmets。此外,还改进了屏幕尺寸公式,以便为 iOS 9 多任务处理做好准备。

var userScreenshots: PHFetchResult!

let scale = UIScreen.mainScreen().scale
let screenWidth = UIScreen.mainScreen().bounds.width * scale
let screenHeight = UIScreen.mainScreen().bounds.height  * scale

let options = PHFetchOptions()
options.predicate = NSPredicate(format: "(pixelHeight == %d AND pixelWidth == %d) OR (pixelHeight == %d AND pixelWidth == %d)", argumentArray: [screenHeight, screenWidth, screenWidth, screenHeight])

options.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: true)]

userScreenshots = PHAsset.fetchAssetsWithOptions(options)

【讨论】:

以上是关于使用照片框架按图片大小过滤照片库的主要内容,如果未能解决你的问题,请参考以下文章

编辑照片尺寸用啥编辑器?

怎么调整照片大小

图片的像素与尺寸

如何压缩照片大小为100K以内

图片怎么压缩大小200k

AD13里面如何改变Pad工具的显示大小?