将图像而不是 UIImage 上传到 Firestore

Posted

技术标签:

【中文标题】将图像而不是 UIImage 上传到 Firestore【英文标题】:Uploading an Image instead of an UIImage to Firestore 【发布时间】:2021-01-07 15:09:17 【问题描述】:

使用 Swift 5.0 / SwiftUI 2.0

将 UIImage 上传到 Firestore 时可用的一种方法是 jpegData(compressionQuality: Double),它实质上可以加快获取保存图像的整个过程。

是否有任何等效的 Image 或任何其他可行的解决方法,或者它像 UIImage 或糟糕的 UX 一样简单

【问题讨论】:

创建一个类型为 UIImage 的变量,然后像 Image(uiImage: image) 一样在 SwiftUI 中使用它 @Yodagama 是的,我知道这个功能,但我不能反过来。这意味着我不能做 UIImage(图像:图像)。您提到的功能非常适合在下载后转换图像,但我对上传感到好奇。现在似乎还可以使用 SwiftUI 进行上传。 当您说Image 时,您的具体意思是什么?另外,用例是什么 - 这是缩略图还是其他什么? @Jay by Image 我的意思是 SwiftUI 模块提供的 Image 类型。这个特定的用例是个人资料图像的缩略图,但为了可扩展性,我不想限制任何一个特定的用例。 好吧,如果这是用于缩略图,Firebase 有一个非常酷的缩略图生成器云功能,可以在服务器级别生成缩略图。见Cloud Storage Triggers。这让服务器可以完成繁重的工作并且速度非常快。 【参考方案1】:
struct ContentView: View 
    
    //Here
    @State var uiImage: UIImage?
    
    var body: some View 
        VStack 
            if uiImage != nil 
                Image(uiImage: uiImage!)
            
            
            
            Button(action: 
                downloadImage()
            , label: 
                Text("Download image")
            )
        
        
    

    func downloadImage() 
        URLSession.shared.dataTask(with:URL(string: "https://upload.wikimedia.org/wikipedia/commons/3/3f/Self-portrait_taken_with_laptop%2C_March%2C_2018.jpg")!)  (data, response, eooror) in
            guard data != nil else  return 
            
            DispatchQueue.main.async 
                self.uiImage = UIImage(data: data!)
            
    
        .resume()
    
    
    //Here
    func getData() 
        var data = uiImage?.jpegData(compressionQuality: 0.5)
    

【讨论】:

以上是关于将图像而不是 UIImage 上传到 Firestore的主要内容,如果未能解决你的问题,请参考以下文章

ios将图像上传到Firebase但是当我尝试下载时却不是这样吗?

将 UIImage 保存到文件而不是 NSUserDefaults

UIImage * 是 __NSCFArray 而不是 UIImage

如何调整 UIImage 的大小以减小上传图像的大小

上传 UIImage 类型的图像列表(Xamarin)

上传 UIImage 到 Parse