PHP XBM class

Текущая версия

Текущая, на данный момент версия - 0.9.0RC1 от 28 сентября 2005. Её автор - я, Евгений Степанищев. Мои координаты есть на сайте.

Предыстория

XBM - пожалуй, единственный формат, который используется веб-мастерами крайне редко. Несмотря на то, что изображения в этом формате поддерживаются всеми ведущими браузерами, известно об этом факте очень малому количеству людей. Конечно, дикие времена, когда GD в составе PHP на хостингах был редкостью уходят в прошлое, тем не менее, такие хостеры встречаются, а задача вывода графики остаётся.

Сам я взялся за этот класс как раз по этой причине - у хостера не было (и нет до сих пор) библиотеки GD, а некоторую информацию нужно было выводить в виде картинки. У формата XBM есть достоинство - он относительно прост, но ест и существенный недостаток - в вашем распоряжении всего два цвета, впрочем, для некоторых задач этого вполне достаточно. Пример работы (код можно посмотреть ниже) класса Image_XBM:

Важное дополнение: оказывается, Internet Explorer 6.0SP1 и старше перестали поддерживать формат XBM из-за того, что у IE были проблемы с парсингом этого формата. Вместо того, чтобы исправить проблему, Microsoft просто удалила поддержку этого формата из своего браузера.

Пример работы PHP-класса

Возможности

Библиотека поддерживает:
  • Чтение и запись формата XBM
  • Графические примитивы - точка, линия, полигон, эллипс, прямоугольник.
  • Заливка цветом
  • Рисование графических примитивов заданным стилем (setStyle)
  • Копирование части изображения
  • Поддержка Figlet-шрифтов при помощи библиотеки Text_Figlet.

Использование

В библиотеке один класс Image_XBM, четыре константы и несколько методов (в большинстве своём совпадают с функциями GD):
  • IMAGE_XBM_BLACK
    константа для чёрного цвета
  • IMAGE_XBM_WHITE
    константа для чёрного цвета
  • IMAGE_XBM_TRANS
    константа для прозрачности (например для того, чтобы при печати шрифтом, шрифт накладывался поверх изображения не затирая его фоном)
  • IMG_COLOR_STYLED
    специальный цвет, для рисования заданным стилем (setStyle)
  • create($x_size, $y_size)
    создаёт пустое (белое) изображение заданного размера
  • getWidth()
    возвращает размер изображения по горизонтали
  • getHeight()
    возвращает размер изображения по вертикали
  • drawLine($x1, $y1, $x2, $y2, $color)
    чертит линию из x1,y1 в x2,y2 заданным цветом
  • drawPixel($x, $y, $color)
    закрашивает пиксел заданным цветом
  • getColorAt($x, $y)
    возвращает цвет пикселя в заданных координатах
  • output([$filename])
    выводит изображение в браузер или файл
  • drawRectangle($x1, $y1, $x2, $y2, $color)
    рисует прямоугольник. x1,y1 - координаты верхнего левого угла, x2,y2 - правого нижнего, color - цвет
  • drawFilledRectangle($x1, $y1, $x2, $y2, $color)
    рисует закрашенный прямоугольник
  • drawPolygon($points, $num_points, $color)
    рисует фигуру из произвольного количества точке. $points - массив из пар координат точке, $num_points - размер массива, $color - цвет
  • destroy()
    уничтожает изображение и переинициализирует все переменные
  • setStyle($style)
    задаёт стиль рисования для цвета IMG_COLOR_STYLED. $style - массив цветов (подробнее - в документации по GD)
  • fill($x, $y, $color)
    "баночка с краской" - заливает область цветом $color, ограниченную со всех сторон цветом, противоположным $color
  • copy(&$src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h)
    копирует часть изображения $src_im размерами $src_w,$src_h из координат $src_x, $src_y в $dst_x, $dst_y
  • createFromFile($filename)
    чтение XBM-изображения из файла
  • drawEllipse($cx, $cy, $w, $h, $color)
    рисует эллипс цветом $color с координатами центра $cx, $cy, шириной $w и высотой $h. Легко догадаться, что при $w=$h получится круг
  • drawFilledEllipse($cx, $cy, $w, $h, $color)
    рисует закрашенный эллипс
  • drawFigletText($text, $font, $size, $fgcolor, $bgcolor, $x, $y)
    выводит текст figlet-шрифтом. $text - текст, который будет выведен; $font - пусть и имя figlet-шрифта, $size - коэффициент умножения (целое число или строка 'X:Y' - отдельные целые коэффициенты умножения по оси X и Y); $fgcolor - цвет текста; $bgcolor - цвет фона; $x и $y - начальные координаты для вывода. Для работы с Figlet-шрифтами требуется наличия модуля Text::Figlet из PEAR.

Пример использования

<?
include_once 'Image/XBM.php';

$xbm = &new Image_XBM;
$xbm->createFromFile('photo.xbm');
$sx = $xbm->getWidth();
$sy = $xbm->getHeight();

$out = &new Image_XBM;
$out->create($sx, $sy);

// Рисуем рамку
$out->setstyle(array(IMAGE_XBM_BLACK, IMAGE_XBM_WHITE, IMAGE_XBM_BLACK, IMAGE_XBM_BLACK, IMAGE_XBM_BLACK));
$out->drawrectangle(0, 0, $sx-1, $sy-1, IMG_COLOR_STYLED);

$out->copy($xbm, 5, 5, 5, 5, $sx-10, $sy-10);
$out->drawfiglettext('Hello, Julia!', 'xbriteb.flf', '2:2', IMAGE_XBM_BLACK, IMAGE_XBM_TRANS, 10, 10);
$out->drawfiglettext(' Image_XBM Package ', '6x10.flf', 1, IMAGE_XBM_BLACK, IMAGE_XBM_WHITE, $sx-145, $sy-20);

header('Content-type: image/xbm');
$out->output();
?>

Скачать

Скачать библиотеку в формате PEAR: Image_XBM-0.9.0RC1.tgz ( байт)
Посмотреть исходный код Image_XBM: XBM.phps
Модуль Figlet: Figlet package
С уважением,
Евгений Степанищев
http://bolknote.ru/