Шаг 19 - Лирическое отступление 2, работа с графикой

Что-то меня на лирику потянуло...;) Поставил себе PHP версии 4.0.4 и понял, что прийдется еще раз отойти от "генеральной линии". Дело в том, что версия 4.0.4 теперь ставится как модуль к Apache и при этом image-функции прекрасно работают!

Но сначала несколько замечаний. Во-первых, при установке PHP как модуля к Apache следует в точности руководствоваться инструкциями по установке PHP, приведенным на сайте How IT work за 18.10.2000, включая требование переноса файла php.ini в windows-каталог (для установки как cgi это было не обязательно - можно хранить ini-файл вместе с php.exe). Во-вторых, после внесения изменений в php.ini надо перезапустить Apache, иначе изменения видны не будут (ну правильно, ставим ведь как модуль!).

Для работы с графическими функциями нужно подключить GD-библиотеку. Для этого в php.ini надо раскомментировать строку "extension=php_gd.dll" (и перезапустить Apache!).

Проверьте также правильность пути расположения dll-файлов библиотек для PHP (строка "extension_dir =" в php.ini).

Графические функции в PHP работают с тремя форматами: GIF, JPEG и PNG. На самом деле поддерживаются (по крайней мере официально) только два формата. GIF из-за проблем с лицензированием в версии 1.6 библиотеки GD в PHP не поддерживается. Т.е. при выполнении скрипта PHP, встретив функцию GIF-группы, не выругается, но и ничего делать не будет.

Теперь о функциях работы с графикой.

Чрезвычайно полезная для организации структуры html-страницы функция GETIMAGESIZE() получает на вход имя файла-картинки (кстати, в порядке исключения, эта функция может работать еще и с форматом SWF ), а возвращает массив из четырех элементов: ширина и высота картинки в пикселях, тип формата (1 = GIF, 2 = JPG, 3 = PNG, 4 = SWF) и четвертый элемент массива (индекс = 3) содержит самую полезную строку для html-кодировщика - атрибут тега IMG: height=xxx width=xxx, где 'xxx' - значения размеров. Полезнейший атрибут для тех, кто хочет избежать неприятного эффекта "прыгающего" текста, когда по мере подгружения браузером вставленных в текст картинок читающий пользователь видит сдвиги текста вниз по экрану (это браузер наконец вычислил размер области под изображение). Второй параметр (необязательный) для функции GETIMAGESIZE() - адрес массива для получения дополнительной информации из заголовка JPG-файлов (к сожалению, я не знаю подробностей на эту тему). Кстати, для этой функции подключать GD-библиотеку в PHP не нужно.

В image-разделе есть группа фукнций, работающих с текстом (формирование изображений из текста) на основе шрифтов в GD-формате. Сформировать такой шрифт можно с помощью утилиты bdf2gdfont, исходный код которой входит, например, в поставку Linux-а. Эта утилита делает GD-фонт из т.н. BDF-шрифта. Насколько я понял, это шрифт предназначен для X-windows (я неправ?).

В любом случае мне с этими шрифтами иметь дело не приходилось, поэтому я опущу рассмотрение функций работы с такими шрифтами (речь идет о таких функциях как ImageLoadFont(), ImageString(), ImageChar(), ImageFontHeight(), ImageFontWidth() и др. Отличить их можно по наличию параметра - идентификатора ресурса шрифта (в мануале "int font"), который возвращает функция ImageLoadFont().

Кстати, есть еще группа функций для работы с postscript-шрифтами: IMAGEPSxxxxx, где 'xxxxx' - функциональность в названии функции. С PS-шрифтами я тоже не работал (пока) и посему рассматривать не буду.
А еще есть функции для работы с truetype-шрифтами. Вот их-то мы и будем использовать!


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Константин Платонов - 25.12.2000