如何从 jsonplaceholder API 解码和编码图像

Posted

技术标签:

【中文标题】如何从 jsonplaceholder API 解码和编码图像【英文标题】:how decode and encode image from jsonplaceholder API 【发布时间】:2016-04-26 03:02:38 【问题描述】:

我想通过这个 API http://jsonplaceholder.typicode.com/photos/3 显示来自"url" by swiftyJson 的图像 我写了这段代码,但返回 nil

var base64String = subDataJSON["url"].stringValue
let decodedData = NSData(base64EncodedString: base64String, options: NSDataBase64DecodingOptions(rawValue: 0))
self.MyImage.image = decodedIamge! as UIImage

我如何从 API 中获取图片? API 中的所有图像都以相同的方式处理吗?

【问题讨论】:

【参考方案1】:

该代码有效吗?从APIhttp://jsonplaceholder.typicode.com/photos/3的响应中可以看出@


  "albumId": 1,
  "id": 3,
  "title": "officia porro iure quia iusto qui ipsa ut modi",
  "url": "http://placehold.it/600/24f355",
  "thumbnailUrl": "http://placehold.it/150/1941e9"

基本上,您在此代码subDataJSON["url"].stringValue 上所做的是您检索“url”节点的值,它将返回“http://placehold.it/600/24f355”。所以,我认为这不是您期望的 base64 字符串。而不是调用

let decodedData = NSData(base64EncodedString: base64String, options: NSDataBase64DecodingOptions(rawValue: 0))

试试这个代码

let decodedData = NSData(contentsOfURL: NSURL(string: base64String))

但是,当我们调用同步时,这可能会阻塞您的 UI 线程。更好的方法是

let dataTask: NSURLSessionDataTask = NSURLSession.sharedSession().dataTaskWithURL(NSURL(string: "")!)  (
            data, response, error) -> Void in
            if let imageView = self.MyImage 
                dispatch_async(dispatch_get_main_queue()) 
                    imageView.image = UIImage(data: data)
                
            

        ;

        dataTask.resume()

【讨论】:

非常感谢它有效!但是我想问你,如果图像作为字符串保存在 API 中怎么办?如何从 base64 解码到 UIImage?因为我的朋友会为我编写 API,他说图像将以字符串形式返回,我应该解码以在我的应用程序中使用它,我该怎么做?有没有现成的带有字符串图像的 API 用于测试代码? 这里是把图片编码成base 64字符串和解码64字符串成图片的代码 //UIImage to Base64 String let image: UIImage = yourImage; let imageData: NSData = UIImagePNGRepresentation(image) let base64String = imageData.base64EncodedStringWithOptions(.Encoding64CharacterLineLength) //将Base64字符串解码为UIImage let base64String = "base64String";让 decodedImageData = NSData(base64EncodedString: base64String, options: .IgnoreUnknownCharacters) 让 decodedImage: UIImage = UIImage(data: decodedImageData)

以上是关于如何从 jsonplaceholder API 解码和编码图像的主要内容,如果未能解决你的问题,请参考以下文章

从 fetch 中检索数据 [关闭]

关于 Fetch API 的一个小困惑 [重复]

TypeError:无法读取 JSONPlaceholder 未定义的属性“url”

无法从 api 获取数据,Future 总是返回 null - 颤振

如何使用反应在离子框架中调用api?

未处理的异常:从 jsonplaceholder.typecode.com/photos 获取 Json 时,类型“List<dynamic>”不是“Map<String, dyna