如何从 MacOS 的照片库中获取所有 PHAsset

Posted

技术标签:

【中文标题】如何从 MacOS 的照片库中获取所有 PHAsset【英文标题】:How to get all PHAssets from MacOS's Photo Library 【发布时间】:2017-12-05 11:49:09 【问题描述】:

我想使用 PHAsset 解析我的 MacOS 照片库中的所有图像。但是,我发现的所有示例都仅适用于 ios,如下面的示例,其中检索资产的最后一行在 macos 框架上不可用:

    NSMutableArray *photos = [[NSMutableArray alloc] init];
    PHFetchOptions *allPhotosOptions = [[PHFetchOptions alloc] init];
    allPhotosOptions.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:YES]];

 // Below compilation error as fetchAssetsWithMediaType is only on iOS framework
    PHFetchResult *allPhotos = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeImage options:allPhotosOptions];

我应该在 MacOS(10.13 版)上使用什么 fetchAssets 命令,或者有其他方法吗?

【问题讨论】:

【参考方案1】:

照片框架——或者至少是该框架的主要子集,它为应用程序提供对整个照片库的读/写访问权限——在 macOS 中不可用。

照片和 PhotosUI 存在于 macOS 中,但仅支持特定的应用扩展功能:

照片编辑扩展。用户在单个资产的编辑模式下从照片应用调用这些,它提供对该资产的照片/视频数据的直接访问,因此它甚至不使用 PHAsset 类。 照片项目扩展。这些涉及资产集合并为每个资产选择性地加载数据,因此存在更多PHAsset/PHImageManager 系统。但是,与 iOS 相比,它仍然是一个缩减的子集(仅是项目扩展所需的内容,例如获取该项目中的资产),并且它只能由应用扩展访问,而不是独立应用。

如果您想要 macOS 上的完整照片框架,最好的选择是file a feature request with Apple。

【讨论】:

【参考方案2】:

从 macOS 10.15 Catalina 开始,Photos 和 PhotosUI 框架现在可以在 Mac 上使用,适用于 Catalyst 和 AppKit 应用程序。因此,您现在应该能够将几乎所有使用 PhotoKit 的 iOS 代码转移到您的 Mac 应用程序中,只要它具有 10.15 作为最低系统要求。

【讨论】:

以上是关于如何从 MacOS 的照片库中获取所有 PHAsset的主要内容,如果未能解决你的问题,请参考以下文章

如何从 iphone 照片库中获取照片总数。?

如何在ios中从手机中获取所有图像

如何从照片库 iphone 获取照片信息?

科尔多瓦,从相机胶卷中获取所有照片

IOS 照片库获取给定照片的相册名称

如何在文档中显示所有视频以及相册中的照片?