使用 SwiftUI 原生 PhotosPicker 获取 PHAsset 或有关图像的任何元数据

Dan*_*iel 2 macos ios swift swiftui

我可以使用 iOS 16 / macOS Ventura 中的新 PhotosPicker 获取图像数据。这是我所做的:

PhotosPicker(selection: $selectedPhotosPickerItems, matching: .any(of: [.images]), photoLibrary: .shared()) {
    Text("Select photos")
}
.onChange(of: selectedPhotosPickerItems) { newItems in for newItem in newItems {
      Task {
           if let data = try? await newItem.loadTransferable(type: Data.self) {
            ... =  UIImage(data: data)
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,我需要有关这张照片的更多信息。如果我能以某种方式获取 PHAsset,那就太棒了,或者至少是原始创建日期。PHAsset 不符合 Transferable。有没有办法只知道图像数据来获取 PHAsset?也许用哈希?

Asp*_*eri 6

Xcode 14 / SwiftUI 4

我们在结果项中有标识符,因此可以获取相应的PHAsset.

这是单个选择项的简化演示(假设 Info.plist 已更新且授权请求已完成)。

.onChange(of: selectedPhotosPickerItem) { newItem in
    if let newItem, let localID = newItem.itemIdentifier {
        let result = PHAsset.fetchAssets(withLocalIdentifiers: [localID], options: nil)
        if let asset = result.firstObject {
            print("Got " + asset.debugDescription)
        }
Run Code Online (Sandbox Code Playgroud)

*此处 iOS/macOS 方法相同

测试模块在这里