Как получить размер (высоту/ширину) изображения из URL-адреса в объективе-C? Я хочу размер контейнера в соответствии с изображением. Я использую AFNetworking 3.0.
Я мог бы использовать SDWebImage
, если он выполняет мои требования.Как получить размер изображения из URL-адреса в ios
ответ
вы можете попробовать, как это:
NSData *data = [[NSData alloc]initWithContentsOfURL:URL];
UIImage *image = [[UIImage alloc]initWithData:data];
CGFloat height = image.size.height;
CGFloat width = image.size.width;
Это синхронный путь. Он будет придерживаться пользовательского интерфейса, пока он не получит данные. –
Использование асинхронного механизма называется НОД в прошивкой, чтобы скачать изображение без воздействия на основной поток.
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;
});
});
Я не загружаю на самом деле. Я использую AFNetworking cachying как [imageView setImageForState: UIControlStateNormal withURL: [NSURL URLWithString: object] placeholderImage: [UIImage imageNamed: @ "DefaultProductImage"]]; –
Зная размер изображения перед фактической загрузкой, это может понадобиться в ряде случаев. Например, установив высоту ячейки 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"]);
Загрузить изображение перед наладку мнение? – trojanfoe
Нет необходимости знать размер изображения. Попробуйте создать UIImageView любого размера, который вы хотите, и измените его тип контента (scaletofill, aspectfill, aspectfit и т. Д.) –
С какого URL вы загружаете изображение? Многие API для службы изображений предоставляют свойство height/width в извлеченных данных (например, json). Вы можете взглянуть на документ API. – luiyezheng