Определение типа и размера изображения
Автор: Константин Александров Иногда возникает задача программно определить тип графического файла и размеры картинки. Например, при добавлении аватара на форум, вставке картинки в сообщение в гостевой книге или в комментарий, вставке картинки в объявление на доске объявлений нужно контролировать формат графического файла, размеры файла и размеры картинки (длину и ширину). Размер самого файла узнать не проблема, а вот для определения размеров и типа картинки придется пользоваться либо стандартными модулями, либо обратиться к спецификации распространенных графических форматов. В случае с модулями должна обеспечиваться их поддержка на сервере, да и программа будет работать медленнее за счет выполнения лишних действий: для определения размеров картинки достаточно только проанализировать заголовок файла, а не создавать в памяти структуру, производить декодировку графических данных, сохранять палитру и параметры изображения. Поэтому для решения этой конкретной задачи я приведу функцию на языке Perl, которую в случае необходимости можно с минимальными затратами переписать на PHP, C или любой другой язык.
######### Возвращает тип и размеры картинки ######### В качестве параметра функция получает байтовый массив, содержащий весь графический файл или его начало (можно ограничиться передачей первых 255 байт файла). Далее по нескольким первым байтам файла определяется его формат: GIF или JPG (jpeg), в зависимости от формата с определенной позиции считываются параметры изображения. В GIF файле задана жесткая структура заголовка, поэтому заранее известно, где хранятся размеры картинки. JPEG файл разбит на секции, каждая из которых имеет свой тип и длину. В цикле осуществляется поиск секции с кодом 0xffc0, в которой и содержатся ширина и высота изображения. |