0

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

我已经对用户创建的所有内容进行了编码ARReferenceImages,并将其放入数组中,但这是我完全难过的地方。

上传到存储似乎很容易UIImages,但说到ARReferenceImages我根本找不到任何地方告诉我该做什么。

我曾尝试在手机上获取文件的路径,但这似乎还不够,或者不正确。所以我想知道是否应该将图像上传为UIImages并分别保存每个图像的宽度,然后我将它们转换为ARReferenceImages下载到手机上。但是,如果我可以ARReferenceImage按原样上传和下载实际内容,这似乎很愚蠢。

谁能指出我正确的方向?

我添加的代码示例只是为了展示我想要做的事情。uploadData 抛出错误,因为它应该是 typeData()而不是 type URL。但我只是不知道该怎么做。

先感谢您。

`
for referenceImage in referenceImagesArray {

    let urlPath = Bundle.main.url(forResource: referenceImage.name, 
    withExtension: nil)

    let thisGameStorageRef = Storage.storage().reference().child(folderRef).child(referenceImage.name ?? "")

            // Get image data
            if let uploadData = urlPath {

                // Upload image to Firebase Cloud Storage
                thisGameStorageRef.putData(uploadData, metadata: nil) { 
(metadata, error) in
                    guard error == nil else {`
4

1 回答 1

0

我环顾了几个小时,阅读了 Firebase 文档、swift 文档以及阅读和查看了几个教程,我得出了以下结论。

似乎我正在尝试做的事情非常困难,或者可能是一个坏主意,因为即使它可能有效,它也可能会破坏应用程序,因为 ARReferenceImages 可能对我尝试做的方式来说太重了。所以我要使用的解决方案是:

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

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

大部分代码并不难,但对于主要问题,我将添加我为保存数组中的 UIImages 而编写的代码:

`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)
}`

如果有人想查看更多我的代码,对于其他部分,只需发表评论,我会发布。

于 2019-01-21T11:45:01.037 回答