2012-06-10 30 views
44

URLから画像を読み込んでUIImageView内に設定する必要があります。問題は私がイメージの正確なサイズを知らないことです、そして、私はどのようにイメージを正しく表示できますか?iOS:URLから画像を読み込み

+2

なぜで画像をダウンロードすることができますそれは問題だろうか?画像がダウンロードされると、そのサイズがわかります。また、イメージがあなたが望むサイズを表示し、イメージをフィットさせるようにストレッチすることもできます。 –

答えて

109

ただ、例えば、UIImageのサイズプロパティを使用します。

NSURL *url = [NSURL URLWithString:path]; 
NSData *data = [NSData dataWithContentsOfURL:url]; 
UIImage *img = [[UIImage alloc] initWithData:data]; 
CGSize size = img.size; 
+0

または、イメージビューで必要なサイズを設定し、イメージビューに合わせてダウンロードしたイメージを伸ばすだけです。 (あなたはストレッチして、面を保つ必要があります、他のすべては奇妙に見えます) –

+0

ああ...しかし、私はimageViewのこの画像のサイズを変更する方法を理解していません。私はミニチュアを作成するためにsholudと私は私のimageView(最大236幅と最大60の高さ)のためのスペースがたくさんありません。この空間では、URLからイメージをロードする必要がありますが、それは比例する必要があります。 – CrazyDev

+2

UIImageViewのcontentModeをUIContentViewScaleAspectFitに設定することをお勧めします。しかし、ドキュメントを見てください。 – fbernardo

13

を迅速に:

var url = NSURL.URLWithString("http://www.example.com/picture.png") 
var data = NSData(contentsOfURL : url) 
var image = UIImage(data : data) 
image.size // if you need it 
9

を迅速に使用してoptionalsについて:SWIFT、IN

var url:NSURL? = NSURL(string: imageString) 
var data:NSData? = NSData(contentsOfURL : url!) 
var image = UIImage(data : data!) 
+1

イメージファイルが指定されたイメージ文字列にない場合、クラッシュする。 – Suragch

+0

if文を使用する!これは安全でないコードであり、urlがnilの場合にクラッシュします –

3

3.0

メインスレッドは、ユーザーインターフェイスとユーザーのやりとりに役立つように、常に空きの状態にしておく必要があります。 https://github.com/onevcat/Kingfisher:この手順は、URLに従うことができカワセミライブラリと非同期画像をダウンロードするには

class ViewController: UIViewController { 

@IBOutlet weak var imageView: UIImageView! 

private func fetchImage() { 
    let imageURL = URL(string: "https://i.stack.imgur.com/9z6nS.png") 
    var image: UIImage? 
    if let url = imageURL { 
     //All network operations has to run on different thread(not on main thread). 
     DispatchQueue.global(qos: .userInitiated).async { 
      let imageData = NSData(contentsOf: url) 
      //All UI operations has to run on main thread. 
      DispatchQueue.main.async { 
       if imageData != nil { 
        image = UIImage(data: imageData as! Data) 
        self.imageView.image = image 
        self.imageView.sizeToFit() 
       } else { 
        image = nil 
       } 
      } 
     } 
    } 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 
    fetchImage() 
} 

} 
0

func imageFromUrl(_ urlString: String) { 
     if let url = URL(string: urlString) { 
      ImageDownloader.default.downloadImage(with: url, options: [], progressBlock: nil) { 
       (image, error, url, data) in 
       DispatchQueue.main.async { 
        self.imageView.image = image 
       } 
      } 
     } 
    } 

ます。また、デフォルトURLSession.shared.dataTask

func imageFromUrl(_ urlString: String) { 
     if let url = URL(string: urlString) { 
      let request = URLRequest(url: url) 
      URLSession.shared.dataTask(with: request) {(data,response,error) in 
       if let imageData = data as Data? { 
        if let img = UIImage(data: imageData){ 
         DispatchQueue.main.async { 
         self.imageView.image = img 
         } 
        } 
       } 
      } 
     } 
    } 
関連する問題