我试图在此网址上将图片表示为缓冲区:http://apiapp-env2.elasticbeanstalk.com/?nomfile=FX1wTPcaZQ1456021964555.png
正如您在响应中看到的那样,图像是存储在JSON内部数据对象中的缓冲区(我不是API的所有者,因此我无法对其进行修改)
好吧,我试图将图像从缓冲区转换为UIImage。 这就是我迄今为止尝试过的事情之一:
Alamofire.request(.GET, URL, parameters: nil, encoding: .JSON)
.validate()
.response{
request, response, json, error in
if let _ = error{
callback?(image: UIImage(named: "placeholder")!)
}else if let _: AnyObject = json{
do {
let jsonObject = try NSJSONSerialization.JSONObjectWithData(json!, options:[])
let bufferData = JSON(jsonObject)["Body"]["data"].array
let imageData = NSData(bytes: bufferData!, length: bufferData!.count / sizeof(UInt32))
let downloadImage = UIImage(data:imageData)
callback?(image: downloadImage!)
} catch {
print("Error[performLoginSocialRequest]: \(error)")
}
}
}
但是downloadImage对象总是为零。 以前有人遇到过这个问题吗?如果是这样,你怎么解决它?
答案 0 :(得分:2)
当您从SwiftyJSON调用.array
对象上的JSON
时,它会返回一个类型为[JSON]?
的数组。虽然将其传递到NSData init方法似乎有效,但它实际上是通过将JSON
对象切换为一个字节大小并存储该数据来创建数据。
您要做的是将bufferData
从[JSON]
类型转换为[UInt8]
。
let bufferData = JSON(jsonObject)["Body"]["data"].array
let bytes = bufferData!.flatMap { $0.uInt8 }
let imageData = NSData(bytes: bytes, length: bytes)