実はusdzファイルからサムネイル画像を作れる
ステップ1
QuickLookThumbnailingをimportする
import QuickLookThumbnailing
ドキュメント
ステップ2
usdzファイルのpathを生成
func generateThumbnail(for resource: String,
withExtension: String = "usdz",
size: CGSize) {
guard let url = Bundle.main.url(forResource: resource, withExtension: withExtension) else { return }
}
ステップ3 QLThumbnailGeneratorをインスタンス化(シングルトン)
let generator = QLThumbnailGenerator.shared
ステップ4 サムネイルにするためのrequestを作る
// 引数にパスとサイズ、大きさ、representationTypesを入れる。
// representationTypes-> 表示するサムネイルの画像の種類。他にiconとか色々ある。
let request = QLThumbnailGenerator.Request(fileAt: url,
size: size,
scale: scale,
representationTypes: .all)
ステップ5 実際にrequestを飛ばす。
generator.generateRepresentations(for: request) { (thumbnail, type, error) in
DispatchQueue.main.async {
if thumbnail == nil || error != nil {
print(error?.localizedDescription ?? "")
} else {
self.thumbnailImage = Image(uiImage: thumbnail!.uiImage)
}
}
}
全体のコード
// Generatorクラス作成し、ObservableObjectに準きょさせてViewModelっぽく使ってる
class ThumbnailGenerator: ObservableObject {
@Published var thumbnailImage: Image?
func generateThumbnail(for resource: String,
withExtension: String = "usdz",
size: CGSize) {
guard let url = Bundle.main.url(forResource: resource, withExtension: withExtension) else { return }
let scale = UIScreen.main.scale
let request = QLThumbnailGenerator.Request(fileAt: url,
size: size,
scale: scale,
representationTypes: .all)
let generator = QLThumbnailGenerator.shared
generator.generateRepresentations(for: request) { (thumbnail, type, error) in
DispatchQueue.main.async {
if thumbnail == nil || error != nil {
print(error?.localizedDescription ?? "")
} else {
self.thumbnailImage = Image(uiImage: thumbnail!.uiImage)
}
}
}
}
}