2016-05-24 25 views
2

目的のCのURLから画像のサイズ(高さ/幅)を取得するにはどうすればよいですか?画像に合わせてコンテナのサイズが必要です。私は使用しています SDWebImage私の要件を満たす場合は使用することができます。iosのURLからイメージサイズを取得する方法

+1

設定アップビューを前にイメージをダウンロードしますか? – trojanfoe

+0

イメージのサイズを知る必要はありません。UIImageViewを作成してコンテンツタイプを変更してください(scaletofill、aspectfill、aspectfitなど) –

+0

あなたはイメージをダウンロードするURLからですか?多くのAPIがイメージサービス用に取得されたデータの高さ/幅プロパティを提供します(jsonなど)。APIドキュメントを見ることができます。 – luiyezheng

答えて

1

あなたは次のように試すことができます:あなたのメインスレッドに影響を与えずに画像をdowloadするためのiOSでのGCDと呼ば

NSData *data = [[NSData alloc]initWithContentsOfURL:URL]; 
UIImage *image = [[UIImage alloc]initWithData:data]; 
CGFloat height = image.size.height; 
CGFloat width = image.size.width; 
+4

これは同期的な方法です。それはデータを取得するまでUIをスタックします。 –

0

使用非同期メカニズム。

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 

    // Download IMAGE using URL 
    NSData *data = [[NSData alloc]initWithContentsOfURL:URL]; 

    // COMPOSE IMAGE FROM NSData 
    UIImage *image = [[UIImage alloc]initWithData:data]; 

    dispatch_async(dispatch_get_main_queue(), ^{ 
     // UI UPDATION ON MAIN THREAD 
     // Calcualte height & width of image 
     CGFloat height = image.size.height; 
     CGFloat width = image.size.width; 

    }); 
}); 
+0

私は実際にダウンロードしていません。私はAFNetworkingのようなキャッシュを使用しています [imageView setImageForState:UIControlStateNormal withURL:[NSURL URLWithString:object]プレースホルダーイメージ:[UIImage imageNamed:@ "DefaultProductImage"]]; –

8

画像を実際に読み込む前に画像のサイズを知ることは、多くの場合に必要になる場合があります。たとえば、実際の画像をcellForRowAtIndexPathの後ろにロードしているときに、heightForRowAtIndexPathメソッド内のtableViewセルの高さを設定します(これは非常に頻繁なキャッチ22です)。

それを行うための一つの簡単な方法、画像I/Oインタフェースを使用してサーバのURLからイメージヘッダーを読むことです:

#import <ImageIO/ImageIO.h> 

NSMutableString *imageURL = [NSMutableString stringWithFormat:@"http://www.myimageurl.com/image.png"]; 

CGImageSourceRef source = CGImageSourceCreateWithURL((CFURLRef)[NSURL URLWithString:imageURL], NULL); 
NSDictionary* imageHeader = (__bridge NSDictionary*) CGImageSourceCopyPropertiesAtIndex(source, 0, NULL); 
NSLog(@"Image header %@",imageHeader); 
NSLog(@"PixelHeight %@",[imageHeader objectForKey:@"PixelHeight"]); 
+0

それは、ありがとう! – TonyTony

+0

あなたは歓迎です – Alex

+0

偉大な答え、それは正常に動作します。 –

関連する問題