Получите ширину и высоту изображения перед его полной загрузкой в ​​iPhone - PullRequest
4 голосов
/ 24 июня 2011

Я загружаю изображение в свой UITableViewCell, используя

[NSData dataWithContentsOfURL: imageUrl]

Для установки пользовательской высоты для моей ячейки просмотра таблицы мне нужен фактический размерзагружаемого изображения.

Можем ли мы получить ширину и высоту изображения перед его полной загрузкой?Заранее спасибо.

Ответы [ 5 ]

8 голосов
/ 10 декабря 2012

вы можете сделать это так:

NSData *imageData = [NSData dataWithContentsOfURL:imageUrl];
UIImage *image = [UIImage imageWithData:imageData];
NSLog(@"image height: %f",image.size.height);
NSLog(@"image width: %f",image.size.width); 
4 голосов
/ 24 ноября 2014

Взгляните на этот вопрос Как извлечь ширину и высоту PNG из просмотра заголовка в объективе c , который описывает, как можно проанализировать метаданные изображения.

У меня есть созданный проект OpenSource Ottran, который выделяет размер изображения и тип удаленного изображения, загружая как можно меньше, который поддерживает форматы PNG, JPEG, BMP и GIF.

4 голосов
/ 24 июня 2011

NSData - это «непрозрачные» данные, поэтому вы не сможете ничего с ними сделать, прежде чем преобразовать их во что-то более «полезное» (например, создать UIImage с помощью метода -initWithData:).В этот момент вы можете запросить размер изображения, но вам будет поздно.

Единственный подход, который я вижу, если вам действительно нужно знать размер изображения до полной загрузки изображения, это реализовать минимальный сервер.со стороны API, так что вы можете запросить размер изображения, прежде чем пытаться загрузить его.

В любом случае, зачем вам нужно знать размер изображения перед его фактической загрузкой?Не могли бы вы установить высоту строки в тот момент, когда она была загружена (т. Е. Из вашего метода делегата запроса)?

2 голосов
/ 15 октября 2016

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

#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 голосов
/ 18 июля 2017

dataWithContentsOfURL является синхронным, он блокирует ваш пользовательский интерфейс до завершения загрузки, поэтому, пожалуйста, используйте заголовок, чтобы получить разрешение, ниже Swift 3.0 код

 if let imageSource = CGImageSourceCreateWithURL(url! as CFURL, nil) {
     if let imageProperties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, nil) as Dictionary? {
          let pixelWidth = imageProperties[kCGImagePropertyPixelWidth] as! Int
          let pixelHeight = imageProperties[kCGImagePropertyPixelHeight] as! Int
          print("the image width is: \(pixelWidth)")
          print("the image height is: \(pixelHeight)")
       }
   }
...