解析数组图像保存和获取
Parse array images saving and fetching
我有一个马赛克应用程序,可以拍摄多张尺寸的照片并将它们分成较小的照片。根据照片的大小,较小照片的数量可能会有所不同。现在我有一个名为 imageNameList2
的 NSMutableArray
,它包含从大图像中截取的所有小图像。对于这个例子,我展示了一个从图像资产列表调用图像的例子,以便更容易回答这个问题。
这里是 imageNameList
(NSMutableArray
包含所有较小的图像)
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 或任何其他格式以进行解析,效果最好,还有另一个名为 retrieve 的按钮,可以从解析中检索所有这些照片.我基本上有一个解析服务器,它利用解析框架来帮助加速后端进程。如果每次存储的图像数量不同,你能告诉我如何保存和检索这个 NSMutableArray
吗?
我认为你正试图做这样的事情。这只是一个例子。有很多工作要做,但希望这能让你开始。我没有 运行 或测试此代码。
我们的想法是将您的图像保存为 PFFiles
,并为每个文件创建一个 'tile' PFObject
。然后将'tile'PFObject
全部保存到PFObject
图像的一个'tiles'键中。然后在需要时通过 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
})
}
})
}
我有一个马赛克应用程序,可以拍摄多张尺寸的照片并将它们分成较小的照片。根据照片的大小,较小照片的数量可能会有所不同。现在我有一个名为 imageNameList2
的 NSMutableArray
,它包含从大图像中截取的所有小图像。对于这个例子,我展示了一个从图像资产列表调用图像的例子,以便更容易回答这个问题。
这里是 imageNameList
(NSMutableArray
包含所有较小的图像)
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 或任何其他格式以进行解析,效果最好,还有另一个名为 retrieve 的按钮,可以从解析中检索所有这些照片.我基本上有一个解析服务器,它利用解析框架来帮助加速后端进程。如果每次存储的图像数量不同,你能告诉我如何保存和检索这个 NSMutableArray
吗?
我认为你正试图做这样的事情。这只是一个例子。有很多工作要做,但希望这能让你开始。我没有 运行 或测试此代码。
我们的想法是将您的图像保存为 PFFiles
,并为每个文件创建一个 'tile' PFObject
。然后将'tile'PFObject
全部保存到PFObject
图像的一个'tiles'键中。然后在需要时通过 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
})
}
})
}