Не текстом единым
Никита Кислицин
Xakep, номер #060, стр. 060-094-2
./configure -with-gd -other-flags
make
su
make install
Следует также заметить, что в ряде поставок Unix библиотека устанавливается по умолчанию (например, большинство Linux дистрибутивов). Если же GD нет, то установка не вызовет затруднений:
./configure
make
su
make install
Также нам потребуются библиотеки zlib и PNG. А если есть желание работать с красивыми шрифтами, то и FreeType. Для windows-программистов все эти функции поставляются модулем php_gd.dll. На диске, прилагаемом к журналу, ты найдешь последние версии используемых библиотек для различных ОС, а также полное описание API по работе с графикой в PHP.
У тебя могло сложиться ошибочное впечатление, что графику можно делать только при помощи специальных библиотек. Но это не так! Можно ведь использовать внешние, самостоятельные программы создания и обработки изображения, позволяющие отправлять результат их работы в стандартный поток вывода. Так, например, используя некоторую абстрактную программу (например, xpaint или pbm-plus) на Unix-машине, можно запросто получить требуемое изображение. Делается это примерно следующим образом:
Header("Content-Type: image/gif");
Passthru("/usr/bin/GrafSoft -flags");
Поясню. Функция passthru используется для выполнения некоторой произвольной программы и перехвата генерируемых ею данных. В нашем случае вызывается внешняя по отношению к сценарию программа, которая, согласно указанным флагам, формирует картинку и направляет ее в стандартный поток вывода. А чтобы браузер верно понял и интерпретировал посылаемые данные, мы сообщаем ему в заголовке, что шлем картинку.
Семантика основных функций
Прежде всего следует рассмотреть основные функции, с помощью которых создаются, модифицируются, копируются и уничтожаются изображения. Чтобы создать новое изображение, необходимо воспользоваться функцией ImageCreate():
Int ImageCreate(int x_size, int y_size). Эта функция создает и размещает в памяти пустое изображение размером x_size на y_size и возвращает указатель на картинку. Импортировать изображение из внешнего файла (например, для дальнейшей модификации) можно при помощи функции ImageCreateFromPng/Jpg:
Int ImageCreateFromPng(Filename) - функция вернет указатель на импортированное изображение.
После того как изображение соответствующим образом модифицировано, либо сохранено на диске, либо отправлено браузеру, следует уничтожить его копию, хранящуюся в системных ресурсах - это сэкономит несколько килобайт памяти. Для этого существует функция ImageDestroy:
Int ImageDestroy(int image). Она принимает единственный параметр - указатель на уничтожаемое изображение и, в зависимости от успеха операции, возвращает булевое значение. При помощи функции ImagePng(int image, string [filename]) программист может либо сохранить обрабатываемое изображение на диске (если указан необязательный параметр filename), либо направить его непосредственно в поток вывода браузеру. При помощи функции ImageCopyResized(int dst_im, int src_im, int DstX, int DstY, int SrcX, int SrcY, int DstW, int DstH, int srcW, int srcH) можно копировать прямоугольную область одного изображения в другое.