使用 .toUIImage() 方法转换后 SwiftUI PhotosPicker 图像大小为 {0,0}

问题描述 投票:0回答:1

我试图弄清楚为什么在我的虚拟设备上成功拾取并显示拾取的图像后,我的 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 存储

谢谢

image swiftui uiimage photospicker
1个回答
0
投票

您可以将选择器项目加载为

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))
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.