Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Экзамен / web / example1 / Введение в PHP.doc
Скачиваний:
103
Добавлен:
18.05.2015
Размер:
3 Mб
Скачать

Рисование с помощью кистей

Весь процесс рисования на холсте производится с помощью цифровой "кисти". Начиная с кисти, используемой по умолчанию, самым простым изменением является изменение толщины кисти. Для этих целей используется функция imagesetthickness():

imagesetthickness($img, $thickness);

Параметр $thickness определяет толщину кисти. Хотя функция imagesetthickness () позволяет рисовать на холсте формы произвольной толщины и цвета, с ее помощью нельзя нарисовать прерывистые линии. Для этих случаев расширение GD предлагает функцию imagesetstyle ():

imagesetstyle($img_r, $style);

Параметр $style дает определение стиля в виде индексированных массивов, в которых в упорядоченном виде содержатся цвета, определяющие кисть в каждом пикселе. Например, если предположить, что существуют переменные Swhite и Sblack, которые определяют соответствующие цвета (белый и черный), то следующий массив может представить "штриховую" кисть:

Sdas = array(Sblack, Sblack, Sblack, Swhite Swhite Swhite);

В этом примере массив Sdas представляет простую кисть, которая состоит из шести пикселей: трех черных, за которыми следуют три белых. Впоследствии этот массив можно передать в качестве параметра Sstyle для функции imagesetstyle (), чтобы определить текущий стиль кисти. После того как стиль будет определен с помощью этой функции, его можно будет использовать для рисования любой геометрической формы, поддерживаемой расширением GD, посредством константы IMGCOLORSTYLED, которая используется вместо того, что обычно может представлять цвет при вызове функции

imagesetstyle () выбирался стиль, после чего константа IMG_COLOR_STYLED, используемая вместо цвета, указывала на то. какой стиль необходимо выбрать в данный момент для рисования.

<?php

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

$im = imagecreatetruecolor(100, 100);

$w = imagecolorallocate($im, 255, 255, 255);

$red = imagecolorallocate($im, 255, 0, 0);

/* Draw a dashed line, 5 red pixels, 5 white pixels */

$style = array($red, $red, $red, $red, $red, $w, $w, $w, $w, $w);

imagesetstyle($im, $style);

imageline($im, 0, 0, 100, 100, IMG_COLOR_STYLED);

imagejpeg($im);

imagedestroy($im);

?>

Чтобы определить сложные кисти, ширина которых состав­ляет несколько пикселей, необходимо использовать другой способ, который заключается в создании другого изображения "кисти" с помощью функции image setbrush ():

imagesetbrush ($img_r, $brush_r);

Параметр $img_r представляет ресурс изображения, а параметр $brush_r задает другой (иной) ресурс изображения, содержащий требуемую кисть. Этот ресурс избражения кисти ничем не отличается от любого другого представленного вам ресурса изображения, и его можно создать с помощью целого ряда функций работы с изображениями GD. Как и в случае с функцией imagesetstyle (), функцию imagesetbrush () следует вызывать всякий раз при изменении кисти. Как и в случае с функцией imagesetstyle (), вместо цвета необходимо использовать специальную константу IMG_COLOR_BRUSHED всякий раз при вызове функции рисования GD, использующей кисть.

Использование специальных стилей для заливки

Кисти могут быть использованы и для заливки участков холста с помощью функции imagefilledpolygon() или imagefill(). Шаблон заливки называется мозаикой (tile) и определя­ется с помощью функции:

imagesettile($img, $tile_r);

Параметр $tile_r представляет ресурс изображения, определяющий мозаику. Подобно кистям, мозаика отображается как другое изображение; ее можно загружать и работать с ней с помощью любых графических функций GD. После того как мозаика будет назначена текущей для функций заливки GD, ее можно использовать, определяя специальный цвет IMG_COLOR_TILED в любой графической функции расширения GD, поддерживающей заливку. Пример использования мозаики

<?php //imagepr17

define("WIDTH", 200); define("HEIGHT", 200);

define("T_WIDTH", 20); define("T_HEIGHT",20);

$img = imagecreate(WIDTH, HEIGHT);

$background=$white=imagecolorallocate($img, 0xFF, 0xFF, 0xFF);

$black = imagecolorallocate($img, 0, 0, 0);

$tile = imagecreate (T_WIDTH, T_HEIGHT) ;

$t_bkgr=$t_white=imagecolorallocate($tile, 0xFF, 0xFF, 0xFF);

$t_black = imagecolorallocate($tile, 0,0,0);

imagefilledrectangle($tile,0,0,T_WIDTH/2,T_HEIGHT/2, $t_black);

imagefilledrectangle($tile,T_WIDTH/2,T_HEIGHT/2,T_WIDTH-1, T_HEIGHT-1, $t_black);

imagerectangle($img, 0, 0, WIDTH-1, HEIGHT-1, $black);

imagesettile($img, $tile);

imagefilledrectangle($img,1,1,WIDTH-2,HEIGHT-2,IMG_COLOR_TILED);

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

imagepng($img);

?>

Соседние файлы в папке example1