繁体   English   中英

Swift 用户界面:Apple Music API 图画质量差

[英]Swift UI: Apple Music API artwork quality is poor

所以我实现了这段代码,根据用户搜索的歌曲从 Apple Music 中获取歌曲插图。 然而,即使只有 50x50 大小的专辑封面也非常模糊。 我不知道是什么导致了这个问题。

  
import Foundation
import SwiftUI

class ArtworkLoader {
  private var dataTasks: [URLSessionDataTask] = []
  
  func loadArtwork(forSong song: Song, completion: @escaping((Image?) -> Void)) {
    guard let imageUrl = URL(string: song.artworkUrl) else {
      completion(nil)
      return
    }
    
    let dataTask = URLSession.shared.dataTask(with: imageUrl) { data, _, _ in
      guard let data = data, let artwork = UIImage(data: data) else {
        completion(nil)
        return
      }
      
      let image = Image(uiImage: artwork)
      completion(image)
    }
    dataTasks.append(dataTask)
    dataTask.resume()
  }

  func reset() {
    dataTasks.forEach { $0.cancel() }
    dataTasks.removeAll()
  }
}

使用上述代码后的专辑封面示例:

使用上面的代码后的专辑封面

根据此处提供的 apple music API 文档 (https://developer.apple.com/documentation/applemusicapi/artwork ),您必须指定希望 API 返回的宽度和高度。

(Required) The URL to request the image asset. {w}x{h}must precede image filename, as placeholders for the width and height values as described above. For example, {w}x{h}bb.jpeg).

艺术品 object 还将通过heightwidth object 属性告诉您给定艺术品可用的最大宽度和高度值是多少。

鉴于您上面的代码,以及您正在使用Song类型 object 的事实。此处的文档https://developer.apple.com/documentation/musickit/song暗示Song object 具有可选的artwork属性类型Artwork

您可以致电 url 获取特定尺寸的艺术品图片:

Song.artwork?.url(width: INSERT_WIDTH, height: INSERT_HEIGHT)

您可以通过调用以下方式获取最大尺寸的艺术品图像 url:

Song.artwork?.url(width: Song.artwork?.maximumWidth?? 0, height: Song.artwork?.maximumHeight?? 0)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM