我试图弄清楚为什么在我的虚拟设备上成功拾取并显示拾取的图像后,我的 PhotosPicker 图像的大小变为 {0,0}
@State private var imageData: Data?
@State private var avatarItem: PhotosPickerItem?
@State private var avatarImage: Image?
VStack{
PhotosPicker("Select Image", selection: $avatarItem, matching: .images)
avatarImage?
.resizable()
.frame(width: 200, height: 200)
.scaledToFill()
.clipShape(Circle())
}
.onChange(of: avatarItem){
Task {
if let loaded = try? await avatarItem?.loadTransferable(type: Image.self) {
avatarImage = loaded
} else {
print("failed")
}
}
}
当我点击此按钮时:
Button(action: {
print("avatar Image: \(avatarImage)")
// output: avatar Image: Optional(SwiftUI.Image(provider: SwiftUI.ImageProviderBox<SwiftUI.Image.(unknown context at $1c5c59f1c).CGImageProvider>))
print("avatar Image: \(avatarImage?.toUIImage().size)")
// output: avatar Image: Optional((0.0, 0.0))
print("avatar image to UIImage: \(imageData)")
// output: avatar image to UIImage: nil
}, label: {
Text("Register")
})
我正在尝试将其转换为 UIImage,以便我可以使用 .jpegData(compressionQuality:) 方法将图像上传到 Firebase 存储
谢谢
您可以将选择器项目加载为
Data
:
if let data = try? await avatarItem?.loadTransferable(type: Data.self) {
imageData = data
}
如果您不一定需要 JPEG 数据,您可以直接将
imageData
上传到 Firebase。
否则,您可以使用
imageData
构造 UIImage
。
Button("Register") {
if let imageData {
print(UIImage(data: imageData))
}
}