将ARReferenceImage从阵列上传到Firebase存储

时间:2019-01-21 09:16:34

标签: swift image firebase firebase-storage

我正在开发一个应用程序,该应用程序在数据库中有ARReferenceImages组供用户下载和使用。这些ARReferenceImages由用户创建。

我已经对所有代码进行了编码,直到用户创建ARReferenceImages为止,并将它们放入数组中,但这完全让我感到困惑。

UIImages上传到存储空间似乎很容易,但是当涉及ARReferenceImages时,我根本找不到任何告诉我该怎么做的地方。

我尝试在手机上获取文件的路径,但这似乎是不够的或正确的。因此,我想知道是否应该以{{1​​}}的形式上传图像,并分别保存每个图像的宽度,然后在下载到手机时将其转换为UIImages。但是,如果我可以原样上传和下载实际的ARReferenceImages,这似乎很愚蠢。

有人能指出我正确的方向吗?

我添加的代码示例只是为了展示我正在尝试做的事情。 uploadData let引发错误,因为它应该是ARReferenceImage类型,而不是Data()类型。但是我只是不知道该怎么做。

谢谢。

URL

1 个答案:

答案 0 :(得分:0)

我已经逛了几个小时,并且阅读了Firebase文档,快速文档以及阅读和查看了一些教程,我得出了以下结论。

似乎我想做的事情很困难,或者是个坏主意,因为即使它可能起作用,也可能会破坏应用程序,因为ARReferenceImages可能太笨重了。因此,我要使用的解决方案是:

  1. 使用相机拍摄图像,同时还要添加图像的真实宽度。这些将以相互引用的名称存储为UIImages和CGFloats。
  2. 然后,我将UIImages和CGFloats分别保存,将UIImage保存在Firebase Cloud Storage中,将CGFloat保存在Firebase Real Time数据库中。
  3. 当我需要将它们用作ARReferenceImage时,我将同时检索图像和宽度并将它们转换为ARReferenceImages,然后将其放入数组中并与我的AR应用程序一起使用。

这需要一些步骤,但是由于无论如何我都必须将图像转换为ARReferenceImage,因此我可以将这段代码从应用程序的上载部分移至下载部分,因此我不会得到更多实际行代码。

大多数代码并不难,但是对于主要问题,我将添加我编写的用于从数组中保存UIImage的代码:

`var counter = 0
 for uiImage in uiImagesArray {
     let imageName = "image\(uiImagesArray[counter])"
     saveImage(imageName: imageName, theImage: uiImage, storageRef: 
     imagesStorageRef)
     counter = counter + 1
 }`

`func saveImage(imageName: String, theImage: UIImage, storageRef: 
 StorageReference){
    //get the PNG data for image
    let imageData = theImage.pngData()
    //create reference for storage
    let thisStorageRef = storageRef.child(gameTitle + "/" + imageName)
    //upload it to Firebase
    thisStorageRef.putData(imageData!, metadata: nil)
}`

如果有人想看更多我的代码,那么对于其他部分,只需发表评论,然后我将其发布。