2017-03-03 30 views
0

我有一個馬賽克應用程序,需要多個尺寸的照片,並將它們分成較小的照片。根據照片的大小,較小的照片數量可能會有所不同。現在我有一個名爲imageNameList2NSMutableArray,它保存從較大圖像獲取的所有較小圖像。在這個例子中,我展示了一個例子,從圖片資源列表中調用圖片,以便於回答這個問題。解析陣列圖像保存和提取

這裏是imageNameListNSMutableArray持有的所有小圖片)

var imageNameList: [String] { 
    var imageNameList2:[String] = [] //[NSMutableArray]() 
    for i in 0...149 { 
     let imageName = String(format: "pic_%03d", Int(i)) 
     imageNameList2.append(imageName) 
    } 
    return imageNameList2 
} 

我想要做的是有一個繼續按鈕,將爲了把這些圖像保存爲piffles或任何其他形式解析這個效果最好,並有另一個按鈕稱爲檢索,將從解析中檢索所有這些照片。我基本上有一個分析服務器,利用分析框架來幫助加快後端進程。如果每次存儲的圖像數量不同,您能否告訴我如何保存並檢索此NSMutableArray

+0

你嘗試過這麼遠嗎?你能顯示你的代碼嗎? – creeperspeak

+0

我不知道從哪裏開始,甚至我知道如何保存一個普通的圖像而不是圖像 – Useruuu

+0

的一個NSMutableArray我想imageNameList – Useruuu

回答

0

我認爲你正在嘗試做這樣的事情。這只是一個例子。有很多工作要做,但希望這會讓你開始。我沒有運行或測試此代碼。

這個想法是將您的圖像保存爲PFFiles,併爲每個文件創建一個「tile」PFObject。然後將所有「瓷磚」PFObject s保存到圖像PFObject的「瓷磚」鍵。然後在需要時通過objectId回想圖像。

祝你好運。

let appleTiles = ["apple1, apple2, apple3"] 
let orangeTiles = ["orange1, orange2, orange3, orange4, orange5"] 

func usage() { 

    //dont literally run these synchronously like this 
    post(appleTiles) 
    post(orangeTiles) 
    download() 
} 

func post(_ tileNames: [String]) { 

    let image = PFObject(className: "Image") 

    let tilesPF = tileNames.map({ name in 
     let data = UIImagePNGRepresentation(UIImage(named: name))! 
     let file = PFFile(data: data) 

     let tile = PFObject(className: "Tile") 
     tile["tile"] = file 
    }) 

    image["tiles"] = tilesPF 

    image?.saveInBackground(block: { responseObject, error in 

     //you'll want to save the object ID of the PFObject if you want to retrieve a specific image later 
    }) 
} 

func download() { 

    let query = PFQuery(className: "image") 

    //add this if you have a specific image you want to get 
    query.whereKey("objectId", equalTo: "someObjectId") 

    query.findObjectsInBackground({ result, error in 

     //this is probably close to how you'd unwrap everything but again, I didn't test it so... 
     if let objects = result as? [PFObject], let first = objects.first, let image = first["image"] as? PFObject, let tiles = image["tiles"] as? [PFObject] { 

      tiles.forEach({ tile in 

       let file = tile["tile"] 

       //now you have an individual PFFile for a tile, do something with it 
      }) 
     } 
    }) 
} 
+0

我試過了,但我得到一個線程斷點崩潰。讓數據= UIImagePNGRepresentation(平鋪爲!UIImage)! – Useruuu

+0

我在UIImagePNGRepresentation(瓷磚)發生錯誤! 「無法將類型pffobject轉換爲鍵入uiimage」 – Useruuu

+0

嗯,我只是將此代碼作爲示例輸入,而未對其進行測試,因此您需要知道如何使用它並瞭解錯誤消息告訴你什麼。我忘了添加一行以將'tile'(圖像名稱)轉換爲實際圖像。我現在將添加該行。 – Frankie