2016-05-24 1 views
2

Как получить размер (высоту/ширину) изображения из URL-адреса в объективе-C? Я хочу размер контейнера в соответствии с изображением. Я использую AFNetworking 3.0. Я мог бы использовать SDWebImage, если он выполняет мои требования.Как получить размер изображения из URL-адреса в ios

+1

Загрузить изображение перед наладку мнение? – trojanfoe

+0

Нет необходимости знать размер изображения. Попробуйте создать UIImageView любого размера, который вы хотите, и измените его тип контента (scaletofill, aspectfill, aspectfit и т. Д.) –

+0

С какого URL вы загружаете изображение? Многие API для службы изображений предоставляют свойство height/width в извлеченных данных (например, json). Вы можете взглянуть на документ API. – luiyezheng

ответ

1

вы можете попробовать, как это:

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

Это синхронный путь. Он будет придерживаться пользовательского интерфейса, пока он не получит данные. –

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 cachying как [imageView setImageForState: UIControlStateNormal withURL: [NSURL URLWithString: object] placeholderImage: [UIImage imageNamed: @ "DefaultProductImage"]]; –

8

Зная размер изображения перед фактической загрузкой, это может понадобиться в ряде случаев. Например, установив высоту ячейки tableView в методе heightForRowAtIndexPath при загрузке фактического изображения позже в cellForRowAtIndexPath (это очень частой улов 22).

Один простой способ сделать это, чтобы прочитать заголовок изображения из URL сервера с помощью Image I/O интерфейс:

#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

Отличный ответ, он отлично работает. –