我正在制作一个多平台 SwiftUI 应用程序,它从 .mp3 文件加载歌曲插图
let playerItem = AVPlayerItem(url: fileURL)
let metadataList = playerItem.asset.metadata
for item in metadataList {
guard let key = item.commonKey, let value = item.value else {
continue
}
switch key {
case .commonKeyArtwork where value is Data :
let songArtwork = UIImage(data: value as! Data)!
default:
continue
}
}
Run Code Online (Sandbox Code Playgroud)
我还可以通过使用获取数据
let interpretedMP3 = AVAsset(url: fileURL)
Run Code Online (Sandbox Code Playgroud)
以及其中的元数据。
这对于 ios 使用来说效果很好,UIImage(data: value as! Data)!但是 macos 不支持 uiimage 那么我应该如何从这些数据中制作图像呢?
Asp*_*eri 17
可以制作一些依赖于平台的图像生成器,例如
func createImage(_ value: Data) -> Image {
#if canImport(UIKit)
let songArtwork: UIImage = UIImage(data: value) ?? UIImage()
return Image(uiImage: songArtwork)
#elseif canImport(AppKit)
let songArtwork: NSImage = NSImage(data: value) ?? NSImage()
return Image(nsImage: songArtwork)
#else
return Image(systemImage: "some_default")
#endif
}
Run Code Online (Sandbox Code Playgroud)
*注意:实际上也可以使用#if os(iOS)etc,但Apple不建议直接检查操作系统,除非确实需要明确的平台知识,而是像上面那样检查API。
| 归档时间: |
|
| 查看次数: |
8781 次 |
| 最近记录: |