PHP-4 Эффективная работа


Установка средств графической поддержки
Функции поддержки работы с графикой
Небольшие графические объекты

17.2.5.14. Вывод TTF-строки: ImageTTFText

array imagettftext (int im, int size, int angle, int x, int y, int col,
                                                        string fontfile, string text)

Функция ImageTTFText () выводит строку текста в изображение i m начиная с координат (х, у) (точкой отсчета является верхний левый угол изображения) под углом angle цветом col. При этом используется шрифт TrueType, содержащийся в файле fontfile.

Фактически координаты (х, у) определяют точку основания первой выводимой буквы строки (обычно это левый нижний угол буквы). Обратите внимание, что этот момент не совпадает с работой функции ImageString( (см. раздел 17.2.5.11), где х и у определяют верхний правый угол первой буквы.

Направление вывода текста задается в градусах, при этом 0° соответствует стандартному направлению слева направо, а 90° — выводу текста снизу вверх.

Текст, подлежащий выводу, может содержать символы UTF-8 вида & #123;, что позволяет выводить символы второй половины кодовой таблицы.

Аргумент col определяет цвет выводимого текста. Если это значение меньше нуля, это означает, что режим согласования цветов (antialiasing) будет отключен.

Функция ImageTTFText () возвращает восьмиэлементный массив, содержащий координаты точек прямоугольника, описывающего текстовую строку. Порядок следования точек: верхняя левая, верхняя правая, нижняя правая и нижняя левая. Как и с другими функциями, позиции точек отсчитываются относительно горизонтального расположения текста вне зависимости от реального направления его вывода на экране.

В приведенном ниже фрагменте производится формирование черной плашечки размером 400 х 30, в которую белым цветом вписывается текст «Проверка... Omega: Q» с использованием шрифта Arial:

<?php
Header ("Content-type : image/png");
$im = imagecreate (400, 30);
$black = ImageColorAllocate ($im, 0, 0, 0);
$white = ImageColorAllocate ($im. 255, 255, 255);
ImageTTFText (Sim, 20, 0, 10, 20, $white, "/path/arial.ttf",
                  "Testing... Omega: Ω");
ImagePNG($im);
ImageDestroy ($im);
?>

совет
       Для работы этой функции необходимо, чтобы на вашей машине были установлены библиотеки GD, FreeType и, конечно же, соответствующие шрифты TTF. А поскольку кодировка этих шрифтов, как правило, Win-1251, то для формирования правильной строки вам, скорее всего, потребуется преобразовать исходную строку с помощью функции convert_cyr_string (см. раздел 11.6).

17.2.6. Работа с цветом

17.2.6.1. Регистрация цветов: ImageColorAllocate

int imagecolorallocate (int im, int red, int green, int blue)

В PHP при программировании графики используется подход, достаточно привычный для человека, имеющего опыт программирования в X-Window. Прежде чем использовать какой-либо цвет, производится его регистрация в системе с помощью специальной функции, которая возвращает идентификатор этого цвета. Именно этот идентификатор используется впоследствии во всех графических функциях. В РНР такой функцией является ImageColorAUocate(). Аргументы функции — это RGB-компоненты цвета, а также идентификатор изображения i m, в пределах которого действует регистрация цвета:

$white = ImageColorAUocate ($1m, 255, 255, 255);
$black = ImageColorAllocate ($im, 0, 0, 0);

17.2.6.2. Отмена регистрации цвета: ImageColorDeAllocate

int imagecolordeallocate (int im, int index)

В некоторых случаях количество зарегистрированных цветов приходится ограничивать, чтобы сэкономить оперативную память. Ненужные цвета можно вывести из обращения, используя функцию ImageColorDeAllocate(). Ее аргументами являются идентификатор изображения i m и зарегистрированный код цвета, который подлежит удалению:

$white = ImageColorAllocate($im, 255, 255, 255);
ImageColorDeAllocate($im, $white);

17.2.6.3. Считывание текущего цвета: ImageColorAt

int imagecolorat (int im, int x, int y)

Функция возвращает регистрационный код цвета в заданной точке изображения, адресуемого указателем im.

См. также описание функции ImageColorSet( )(раздел 17.2.6.7).

17.2.6.4. Выбор ближайшего цвета: ImageColorClosest

int imagecolorclosest (int im, int red, int green, int blue)

Функция возвращает код цвета в зарегистрированной палитре, связанной с изображением, который максимально близок к указанному RGB-коду изображения.

Мерой расстояния между цветами является обычная эвклидовская мера в трехмерном пространстве RGB.

17.2.6.5. Считывание кода цвета: ImageColorExact

int imagecolorexact (int im, int red, int green, int blue)

Функция возвращает код указанного цвета, который должен быть зарегистриро- ван в палитре изображения i m. Если же такого цвета в палитре нет, функция возвращает -1.

Понятно, что при необходимости можно автоматически регистрировать новый цвет и всегда возвращать нужный указатель:
function registerColor($im, $red, $green, $blue)
{
       $color = ImageColorExtract($im,$red,$green,$blue);
       if ($color == -1) {
          $color = ImageColorAllocate ($im, $red, $green, $blue);
       }
       return $color;
}
См. также описание функции ImageColorClosest( ) (раздел 17.2.6.4).

17.2.6.6. Определение кода цвета: ImageColorResolve

int imagecolorresolve (int im, int red, int green, int blue)

Функция в целом эквивалентна рассмотренной выше, но отличается тем, что никогда не возвращает отрицательный результат. Если точного значения для заданного цвета в палитре не предусмотрено, функция вернет ближайший похожий цвет.

См. также описание функции ImageColorClosest( ) (раздел 17.2.6.4).

17.2.6.7. Настройка цвета в палитре: ImageColorSet

bool imagecolorset (int im, int index, int red, int green, int blue)

Функция выполняет настройку заданного элемента (index) палитры, устанавливая в него заданный RGB-компонентами цвет. Как правило, функция применяется при имитации заливки областей участка картинки без выполнения собственно операции заливки.

См. также описание функции ImageColorAt () (раздел 17.2.6.3).

17.2.6.8. Извлечение RGB-компонентов: ImageColorsForlndex

array imagecolorsforindex (int im, int index)

Функция возвращает ассоциативный массив (ключи — red, green и blue), который содержит соответствующие значения компонентов для заданного элемента палитры.

См. также описание функций ImageColorAt () (раздел 17.2.6.3) и ImageColorExact () (раздел 17.2.6.5).

17.2.6.9. Общий размер палитры: ImageColorsTotal

int imagecolorstotal (int im)

Функция возвращает общее количество цветов в палитре указанного изображения.

17.2.6.10. Регистрация прозрачного цвета: ImageColorTransparent

int imagecolortransparent (int im [, int col])

Функция ImageColorTransparent () определяет, какой из цветов, зарегистрированных в текущей палитре изображения, будет интерпретироваться как прозрачный цвет фона. Аргумент im должен указывать на изображение, созданное с помощью ImageCreate().

Функция возвращает идентификатор нового (или текущего, при отсутствии второго аргумента) прозрачного цвета.

17.2.7. Графические инструменты

17.2.7.1. Отрисовка дуги: ImageArc

int imagearc (int im, int cx, int cy, int w, int h, int s, int e, int col)

Функция прорисовывает фрагмент эллипса, центр которого расположен в точке (сх, су) (отсчет координат от левого верхнего угла холста) в картинке, адресуемой указателем im. Аргументы w и h задают ширину и длину эллипса, а точки начала и конца отрисовки определяются аргументами s и е. Аргумент col определяет цвет изображения.

Чтобы детально разобраться с влиянием отдельных аргументов на работу функции, поэкспериментируйте с программой, приведенной в листинге 17.9.

Листинг 17.9. Пример использования функции ImageArc <?php

// Приступаем к генерации картинки
$image = imageCreate(600, 350);
// Фиксируем все используемые нами цвета
$colorBackgr           = imageColorAllocate($image, 232, 232, 232);
$colorForegr           = imageColorAllocate($image, 5, 55, 255);
$colorText           = imageColorAllocate($image, 0, 0, 0);

// Формируем заголовок, информирующий навигатор о типе
// файла
header("Content-type: image/png");

// Включаем режим чересстрочной генерации изображения
imageInterlace($image, 1);

for ($i=l;$i < 10; $i++) {
       // Синтезируем параметры дуги
       $сх = $i*50; $су = $1*20+40; // центральная точка
       $wx = $i*10+20; $wy = $wx;

       ImageArc($image,$cx,$cy,$wx,$wy,$i*3,$i* 12+25,
               $colorForegr);
       ImageString($image,2,$cx,$cy-20,"Дуга $i" ,$colorText);
       }

// Переключаем фоновый цвет в режим "прозрачного"
imageColorTransparent($image, $colorBackgr);

// и отправляем картинку на машину клиента
imagepng($image);
?>
Результат работы программы приведен на рис. 17.7.

Рис. 17.7. Функция отрисовки дуг эллипса позволяет выделить практически любой фрагмент дуги
примечание
       В настоящее время в состав CVS версии РНР уже включено еще несколько функций, предназначенных для отрисовки эллипсов, в том числе и с заливкой, однако пользоваться такой версией PHP-машины вы можете только на свой страх и риск.

17.2.7.2. Отрисовка буквы: ImageChar

int imagechar (int im, int font, int x, int y, string c, int col)

Функция imageChar () осуществляет отрисовку первой буквы строки с в изображении, идентифицируемом указателем i m. При этом верхний левый угол изображения буквы помещается в точку (х, у), а идентификатор цвета определяется аргументом col. Встроенные шрифты выбираются путем присвоения аргументу font значений от 1 до 5. Если же вы используете внешний шрифт, загруженный при исполнении PHP-программы, то этот параметр должен содержать идентификатор шрифта, возвращаемый функцией ImageLoadFont( ) (см. раздел 17.2.5.3).

17.2.7.3. Вертикальная отрисовка буквы: ImageCharUp

int imagecharup (int im, int font, int x.int y, string c, int col)

Функция в целом эквивалентна предыдущей, но отличается тем, что направление вывода буквы не горизонтальное (слева направо), а вертикальное (снизу вверх). Используется преимущественно при описании оси ординат отображаемых функций.

17.2.7.4. Прорисовка пунктира: ImageDashedLine

int imiagedashedline (int im, int xl, int yl, int x2, int y2, int col)

Функция ImageDashedLine() предназначена для прорисовки пунктирной линии от точки (xl, у 1) до точки (х2, у 2). Отсчет координат начинается с левого верхнего угла изображения.

Для демонстрации работы этой функции мы нарисуем простую координатную сетку, которую впоследствии можно будет использовать для вывода графиков. Для этого нам понадобится программа на РНР, приведенная в листинге 17.10.

Листинг 17.10. Демонстрация работы функции ImageDashedLine
<?php
// imstr.php - Отрисовка координатной сетки

$image = imageCreate(600 ,400);

header("Content-type: image/png");

$black = ImageColorAllocate($image,0,0,0);
$white = ImageColorAllocate($image,255,255,255);

ImageFilledRectangle($image,0,0,600,400,$white);

ImageString($image,4,225,5,"Координатная сетка" ,$black);

$stx = 50; $sty = 50; // Начало сетки

$dashed = 0;
for        ($i=l; $i<10; $i++) {
          $dashed = $dashed ? 0 : 1;      // перевертыш
          $cy = $sty + $i*30;
          if ($dashed)
                 { ImageDashedLine($image,$stx,$cy ,$stx+450, $cy ,$blасk) ; }
          else
                 {ImageLine($image,$stx,$cy,$stx+450,$cy,$black); >
}
// Аналогичным образом рисуем вертикальные полосы
for        ($i=l; $i<15; $i++) {
          $dashed = $dashed ? 0 : 1;      // перевертыш
          $cx = $stx + $i*30;
          if ($dashed)
                 { ImageDashedLine($image,$cx,$sty,$cx,$sty+300,$black); }
          else
                  {ImageLine($image,$cx,$sty,$cx,$sty+300,$black) ; }
// Теперь выводим оси
ImageLine($image.$stx,350,$stx+500,350,$black);
ImageLine($i mage,$stx+500,350,$stx+490,345,$black);
ImageLine($image,$stx+500,350,$stx+490,355,$black);

Imagestring($image,3,$stx+500,355,"x",$black);

ImageLine($image,$stx,$sty,$stx,350,$black);
ImageLine($image,$stx,$sty,Sstx+5,60,$black);
ImageLine($1mage,$stx,$sty,$stx-5,60,$black);

ImageString($image,3,$stx-20,$sty,"y",$black);
// отправляем картинку на машину клиента imagepng($image);
?>


Результат выполнения этой программы приведен на рис. 17.8.

Рис. 17.8. Использование функции ImageDashedLine упрощает получение различных визуальных эффектов
назад
далее

Сайт управляется системой uCoz