【问题标题】:firebase image size increasefirebase 图像大小增加
【发布时间】:2020-10-03 08:15:18
【问题描述】:

请有人解释为什么会发生这种情况?我正在检查,所以我直接从 firebase 上传了一张图片,我得到了它的原始尺寸,但是当我使用这个代码上传它时,尺寸会增加。

 func storeImageInFirebase(){
           let storeageRef = Storage.storage().reference()

           let imageName = UUID().uuidString
           let imagesReference = storeageRef.child("images").child(imageName + ".jpeg")
           let imageData = self.imgView.image?.jpegData(compressionQuality: 1)
           let metaData = StorageMetadata()


         metaData.contentType = "image/jpeg"
         imagesReference.putData(imageData!, metadata: metaData){ (metadate, error)
               in
               guard metadate != nil else{
                   print("Error: \(String(describing: error?.localizedDescription))")
                   return
               }
              // Fetch the download URL
               imagesReference.downloadURL(completion: {(url, error)
                   in
                   if error != nil {
                       print("Faild to download url:", error!)
                       return
                   }else{
                       print("original image url ..... \(url?.absoluteString)")
                       // show the url in real database
                    var theUsedURL = self.imgURL = (url?.absoluteString)!

                       self.sendDataToFirebase()

                   }
               })

           }

       }

enter image description here

【问题讨论】:

    标签: swift image firebase google-cloud-storage firebase-storage


    【解决方案1】:

    JPEG 是一种有损文件格式:它以一种压缩方式存储图像数据,具体取决于所使用的压缩系数。

    图像视图中的图像数据始终是未压缩的:它显示图像的原始字节。

    你很可能是:

    1. 从JPEG文件中读取压缩数据,然后
    2. 在图像视图中显示该数据的未压缩版本,最后
    3. 将数据作为未压缩(或压缩程度较低)的 JPEG 文件写回存储。

    如果要控制压缩后的图片有多大,可以修改compressionQuality中的:

    jpegData(compressionQuality: 1)
    

    如果您希望写入完全相同的文件,则不应重新压缩数据,而是读取未压缩的数据并将该完全相同的数据直接写回存储。

    【讨论】:

    • 好的,我尝试使用let imageData = self.imgView.image?.pngData(),但我遇到了同样的问题。
    • 那仍然从图像视图中读取图像数据,所以在上面的第 3 步。如果你想写回原始的原始数据,你不应该把它放在一个图像视图中。
    • 我写了一个全局变量 var imageSelected2 : UIImage = UIImage.init() 然后在 imagePickerController 我做了 imageSelected2 = imageSelected 所以我将 metaData 更改为 let imageData = self.imageSelected2.pngData() 我只是注意到没有图像上传到 firebase
    • 对不起,我尽力解释了这个过程,因为我不清楚代码。 UIImage 的名称表明它仍将数据放入 UI,这意味着它仍是第 2 步。
    • 没关系。我只是试图在不压缩的情况下将图像发送到 firebase 并将其存储为 URL,以便我可以将其保存在数据库中。拜托,您能否分享解释将图像发送到 Firebase 的正确过程的文档或视频链接?感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-03
    • 2017-04-22
    • 2019-03-11
    • 2013-11-28
    • 2016-06-13
    相关资源
    最近更新 更多