iOS: как получить размеры изображения, не открывая его - PullRequest
8 голосов
/ 30 июня 2011

В приложении для iOS мне нужно предоставить фильтры изображений по размеру (ширине / высоте), подумайте о чем-то похожем на «Большой, Средний, Маленький» в поиске картинок Google. Открытие каждого изображения и чтение его размеров при создании списка будет очень требовательным к производительности. Есть ли способ получить эту информацию, не открывая само изображение?

Дэмиен ДеВиль ответил на вопрос ниже, основываясь на его предположении, я сейчас использую следующий код:

NSURL *imageURL = [NSURL fileURLWithPath:imagePath];
if (imageURL == nil)
    return;

CGImageSourceRef imageSourceRef = CGImageSourceCreateWithURL((CFURLRef)imageURL, NULL);
if(imageSourceRef == NULL)
    return;

CFDictionaryRef props = CGImageSourceCopyPropertiesAtIndex(imageSourceRef, 0, NULL);    
CFRelease(imageSourceRef);

NSLog(@"%@", (NSDictionary *)props);

CFRelease(props);

Ответы [ 2 ]

9 голосов
/ 04 января 2012

Вы можете использовать ImageIO для этого.

Если у вас есть URL-адрес изображения (или из пути к файлу создайте URL-адрес с + fileURLWithPath в NSURL), вы можете создать источник изображения с помощью CGImageSourceCreateWithURL (вы будетенеобходимо соединить приведение URL-адреса с CFURLRef).

Получив источник изображения, вы можете получить CFDictionaryRef свойств изображения (которое можно снова связать с приведением к NSDictionary), вызвав CGImageSourceCopyPropertiesAtIndex.Вы получите словарь с множеством свойств изображения, включая pixelHeight и pixelWidth.

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

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

Заставьте вас импортировать и добавить фреймворк в ваш проект.

0 голосов
/ 22 апреля 2014

Всего одно дополнение: если вы хотите использовать веб-URL, например, http://www.example.com/image.jpg, используйте [NSURL URLWithString: imagePath] вместо [NSURL fileURLWithPath: imagePath].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...