Большинство из функций, описанных в этой главе, для работы нуждаются в расширении gd или exif. Функции, работающие с расширением gd, начинаются с префикса image, не имеют в своем имени символы подчеркивания и требуют наличия GD-библиотеки. Функции exif начинаются с префикса exif_.
Другие функции из этой главы нуждаются не только в библиотеке GD, но еще и в одной или нескольких библиотеках поддержки. Например, для того, чтобы записывать и считывать изображения в формате JPEG, потребуется библиотека JPEG. Естественно, это зависит от того, каким образом PHP был откомпилирован.
Библиотека GD была создана компанией Boutell.com, которой Internet-сообщество обязано несколькими инструментами, созданными в соответствии с канонами сообщества Open Source. Эта библиотека исторически поддерживала создание изображений в формате GIF, но в 1999 году этому формату был предпочтен формат PNG. Алгоритм сжатия, используемый при создании GIF-файлов, запатентован, а это означает, что разработчики программного обеспечения, использующего этот формат, должны иметь соответствующие права на работу с ними. С другой стороны, PNG-формат имеет открытую спецификацию. Более того, он оказался технически совершеннее формата GIF. Поддержка PNG была добавлена в четвертые версии двух наиболее популярных браузеров Netscape Navigator и Microsoft Internet Explorer, поэтому использование формата PNG добавляет гибкость. В 2000 году в библиотеку GD была добавлена поддержка других форматов поддержки изображений JPEG и WBMP.
В 2002 году интерес к использованию библиотеки GD несколько ослаб, но со стороны PHP-сообщества он не ослабевал никогда. Для того чтобы ее доработка продолжалась, разработчики PHP решили включить ее в проект PHP. Несмотря на то что развитие GD-библиотеки продолжается и в оригинальном проекте GD, версия PHP отличается большей функциональностью. У вас есть возможность не пользоваться встроенной версией библиотеки GD, но при написании сценариев причин для этого остается все меньше. GD-библиотека размещается на Web-узле <http://www.boutell.com/gd/>. Адрес стартовой страницы PNG - <http://www.libpng.org/pub/png/>.
В главе 25, "Создание графических изображений", функции, описанные в этой главе, используются для разработки некоторых практических приложений.
16.1. Анализ изображений
Эти функции предназначены для чтения информации из изображений. integer exif_imagetype(string file)
Функция exif_imagetype считывает первые несколько байт файла изображения и возвращает его тип в виде целого числа. В табл. 16.1 приведены распознаваемые типы. Если PHP не может определить тип, он возвращает значение FALSE.
Обработка изображений и графики
array exif_read_data(string file, string sections, boolean create_arrays, boolean read_thumbnail)
Функция exif_read_data (листинг 16.1) считывает заголовки EXIF из файлов изображений в формате JPEG или TIFF и возвращает массив, использующий имена заголовков в качестве ключей. Необязательный аргумент sections может быть списком разделов, разделенных запятыми, которые должны быть представлены в файле (табл. 16.2). Необязательный аргумент create_arrays управляет организацией значений заголовков в подмассивы, имеющие имена разделов. Необязательный аргумент read_thumbnail управляет считыванием PHP-меток.
Обработка изображений и графики
j Листинг 16.1. Функция exif_read_data_
<?php
$file = 'waterfall.jpg';
if(exif_imagetype($file) == IMAGETYPE_JPEG) {
$exif = exif_read_data($file, "COMPUTED,IFD0", TRUE); print("<img src="$file" " .
"{$exif['COMPUTED,][,html']} " .
"border="0"><br>" -
"Picture taken {$exif['IFD0']['DateTime']} " . "with a {$exif['IFD0']['Make']} " . "{$exif['IFD0']['Model']}<br>");
}
else
{
print(' Ошибочный тип изображения '),-
}
?>

string exif_thumbnail(string file, reference width, reference height, reference type)
Функция exif_thumbnail (листинг 16.2) выбирает маркер из JPEG- или TIFF-файла, если он существует. Необязательными аргументами width и height задаются целочисленные значения ширины и длины. Необязательным аргументом type задается один из типов изображений, приведенных в табл. 16.1. 
Листинг 16.2. Функция exif thumbnail

<?php
$file = 'waterfall.jpg';
$thumbnail = exif_thumbnail($file, $width, $height, $type); if($thumbnail !== FALSE)
{
header("Content-type: " . image_type_to_mime_type($type)); print($image);
}
?>