将图像而不是 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