Надеюсь, этот отдельный пост оправдан, так как я был обеспокоен тем, что этот ответ будет потерян как просто комментарий к моему предыдущему посту. И почему вы считаете это достойным отдельного поста, спросите вы? Ну, я думаю, что нашел ответ.
Конечно, я использую CLI-версию, а не libcurl (на вашем языке по вашему выбору), но я достаточно возился, пока не получил рабочий ответ. Это выглядит следующим образом:
curl -r 0-25 --silent http://www.google.com/logos/giroux1.jpg | identify -format "%wx%h" -
То, что происходит здесь в приведенном выше примере, заключается в том, что CURL использует флаг -r для запроса только первых 25 байтов файла и передает его команде imagemagick с именем IDENTIFY, где он извлекает размеры и распечатывает их в указанном формат.
Для получения дополнительной информации о том, что вы можете извлечь с помощью ИДЕНТИФИКАЦИИ, посетите http://www.imagemagick.org/script/identify.php
Чтобы сделать команду немного более понятной для сценариев, я бы добавил в конец "2> / dev / null", чтобы подавить сообщения об ошибках (stderr):
curl -r 0-25 --silent http://www.google.com/logos/giroux1.jpg | identify -quiet -format "%wx%h" - 2> /dev/null
В отличие от изображений в формате GIF, где размеры, по-видимому, тесно связаны с первыми 10-20 байтами, похоже, что для получения данных размеров из JPEG не требуется фиксированное количество байтов. Еще одно тестирование показало, что для больших изображений вам может потребоваться запросить первые ~ 10k, чтобы получить данные измерений. Хорошим примером является следующее изображение размером 4 МБ из НАСА: http://veimages.gsfc.nasa.gov/17921/southern_africa_25jul02_lrg.jpg Я обнаружил, что не менее 5971 байта будет отображать размеры (10836 x 9324), но я полагаю, это лучше, чем загружать все это.
Дело в том, что ... ваш пробег может отличаться, так что попробуйте сами.