2016-04-26 4 views
2

私が欲しい、このAPIを介して http://jsonplaceholder.typicode.com/photos/3 表示画像私はこのコードを書いたが、私はAPIからイメージを持って来るんかswiftyJson によって<code>"url"</code>からjsonplaceholder APIからどのようにデコードおよびエンコード画像

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

nilを返すのですか? APIのすべての画像は同じ方法で処理されますか?

答えて

1

このコードは機能しますか?私はAPI基本的http://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にやっていること、それは「http://placehold.it/600/24f355」を返しますあなたは、「URL」ノードの値を取得していることです。だから、私はそれがあなたの期待通りのbase64文字列ではないと思います。代わりにこのコード

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

を試してみてください

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

を呼び出す我々は同期呼び出しているようしかし、これは、ブロックあなたの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() 
+0

ありがとうございます!しかし、私はあなたに尋ねたいと思います。イメージがAPIで文字列として保存されたらどうなりますか?どのようにBase64からUIImageにデコード?私の友人が私のためにAPIを書いてくれるので、画像は文字列として戻ってくると私は自分のアプリケーションでそれを使用するためにデコードする必要があると言いました。どうすればいいですか?テストコード用の文字列イメージを持つ準備ができているAPiはありますか? – amjad

+0

ここにコードを64文字列の基にエンコードし、64文字を画像にデコードするコードを示します。 // UIImageからBase64への文字列 let image:UIImage = yourImage; 画像データましょう:たNSData = UIImagePNGRepresentation(画像) せbase64String = imageData.base64EncodedStringWithOptions(.Encoding64CharacterLineLength) //デコードのBase64文字列base64String = "base64String" をせUIImage します。 let decodedImageData = NSData(base64EncodedString:base64String、options:.IgnoreUnknownCharacters) let decodedImage:UIImage = UIImage(data:decodedImageData) – HDT

+0

ありがとうございました! – amjad

関連する問題