2014-02-19 3 views
1

Я думаю, что прошу невозможного, но спрошу все равно ...
У меня есть папка (с несколькими подпапками), которая содержит много изображений в JPG и PNG. И мне нужен инструмент, который создает список этих файлов, включая их размеры. (Ширина и высота.) Для этого я могу просто загрузить изображение в растровое изображение и прочитать свойства Width/Height. Это было бы хорошо, если бы сами изображения не были такими огромными ...
Стандартный размер изображения составляет около 8 мегапикселей, но около 10% составляет от 40 до 100 мегапикселей. (Да, это 10 000x10 000 пикселей.) Это означает, что я имею дело с файлами PNG размером от 50 до 100 МБ каждый. В общей сложности 7500 изображений это означает, что мой инструмент довольно занят чтением большого количества файлов.
Мне нужен более быстрый способ прочитать размеры этих типов файлов. Не из-за использования памяти, поскольку моя система имеет 32 ГБ оперативной памяти, а потому, что я не хочу ждать 45 минут, чтобы индекс был сделан ... (Ну, небольшое преувеличение, но это не быстро.)Как получить габариты изображения без загрузки изображения

ответ

1

У вас есть полная статья и рабочий код по следующей ссылке (CodeProject).

http://www.codeproject.com/Articles/35978/Reading-Image-Headers-to-Get-Width-and-Height

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

+0

Выглядит хорошо. Полный код находится за стенкой регистрации, поэтому он менее доступен для других. Кроме того, в статье говорится, что он не работает для всех изображений, поэтому ему нужна конструкция try/catch. Так может быть, у кого-то есть лучший пример? –

0

Посмотрите на jhead here. или exiv2, см. here.

Это довольно быстро, и вы можете использовать что-то вроде «system()» для запуска и анализа вывода.

Пример вывода:

File name : b.jpg 
File size : 643664 bytes 
File date : 2014:02:19 13:07:29 
Camera make : NIKON CORPORATION 
Camera model : NIKON D2Xs 
Date/Time : 2007:08:01 11:02:28 
Resolution : 1200 x 797 
Flash used : No 
Focal length : 28.0mm (35mm equivalent: 42mm) 
Exposure time: 0.0016 s (1/640) 
Aperture  : f/7.1 
ISO equiv. : 250 
Whitebalance : Auto 
Metering Mode: center weight 
Exposure  : shutter priority (semi-auto) 
GPS Latitude : N 52d 13.3690m 0s 
GPS Longitude: W 0d 52.7070m 0s 
GPS Altitude : 456.00m 

Exiv2 обрабатывает PNG файлов, а также, и C-вызываемым в качестве библиотеки, поэтому, может быть, более элегантно.

+0

Я действительно не хочу разбирать выходные данные другого приложения, и мне не нравится вызывать стороннюю библиотеку из моего кода. Он должен делать намного больше, чем просто читать размеры изображений, так как ему нужно создать каталог этих изображений. Мой проект создаст миниатюры «по требованию», но должен показать сетку с шириной/высотой исходного изображения. (Без миниатюры.) –

Смежные вопросы