You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift技术问询:如何获取相册中除截图、连拍、实况外的PHAsset?

解决方法

你的代码目前只筛选了PHAssetMediaType.image类型的资源,但没有排除截图、连拍和实况照片这三类特殊图片。我们需要在NSPredicate中添加额外的排除条件,具体如下:

关键排除条件解析

  • 排除截图:利用PHAsset的isScreenshot属性,直接判断是否为截图
  • 排除连拍照片:连拍组内的所有asset会共享同一个burstIdentifier,所以只要该属性为nil,就不属于连拍资源
  • 排除实况照片:实况照片属于图片的子类型,对应的枚举是PHAssetMediaSubtype.imageLive,我们需要排除包含这个子类型的资源

完整代码示例

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

// 组合所有筛选条件:是图片 + 非截图 + 非连拍 + 非实况照片
options.predicate = NSPredicate(format: """
    mediaType = %d 
    AND isScreenshot = NO 
    AND burstIdentifier == nil 
    AND (mediaSubtypes & %d) == 0
""", PHAssetMediaType.image.rawValue, PHAssetMediaSubtype.imageLive.rawValue)

let assets = PHAsset.fetchAssets(with: options)

代码说明

  • 谓词中的(mediaSubtypes & %d) == 0是位运算判断,确保asset的媒体子类型不包含实况照片的标识
  • 所有条件用AND连接,保证同时满足“是图片”且“不属于三类排除项”的要求

内容的提问来源于stack exchange,提问作者kuwhkud

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:06:41