【问题标题】:how decode and encode image from jsonplaceholder API如何从 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 中的所有图像都以相同的方式处理吗?

【问题讨论】:

    标签: ios swift uiimageview base64 swifty-json


    【解决方案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)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 2012-05-01
    • 2015-12-05
    • 1970-01-01
    相关资源
    最近更新 更多