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

Заливка изображений

Наряду с функциями imagerectangle(), imagepolygon() и imageellipse() расширение GD предлагает функции imagefilledrectangle () , imagefilledpolygon() и imagefilledellipse(). Каждая из этих трех функций имеет такой же синтаксис, как и рассмотренные их аналоги, однако заливают всю геометриче­скую форму определенным цветом.

Синтаксис функции imagefilledarc () имеет следующий вид:

imagefilledarc($img, $center_x, $center_y, $width, $height, $start_ang, $end_ang, $color, $style);

Дополнительный параметр $style представляет собой битовое поле, состоящее из одной или несколь­ких констант: IMG_ARC_PIЕ – Заливает сегмент наподобие сегмента секторной диа­граммы; IMG_ARC_CHORD – Заливает сегмент до хорды дуги (то есть, до линии, соединяющей начало и конец дуги); IMG_ARC_EDGED – Используется только вместе с IMG_ARC_NOFILL, чтобы очертить участок, который может быть залит чем-то наподобие IMG_ARC_PIE; IMG_SRC_NOFILL – Используется только вместе с IMG_ARC EDGED, чтобы определить, что сегмент нужно только очертить, но не заливать.

Пример построения секторной диаграммы с использованием функции imagefilledarc():

<?php

// create image //imagepr10

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

$pie_data = array (10, 5, 20, 40, 10, 15);

$image = imagecreatetruecolor(WIDTH, HEIGHT);

// allocate some solors

$white = imagecolorallocate($image, 0xFF, 0xFF, 0xFF);

$navy = imagecolorallocate($image, 0x00, 0x00, 0x80);

$cx=(int)WIDTH/2; $cy=(int)HEIGHT/2;

$a=WIDTH-20; $b=(int)$a/2;

$col=$white;

// make the 3D effect

imagefilledarc($image,$cx,($cx+20),$a,$b,0,360,$navy, IMG_ARC_PIE);

$langl = 0;

foreach($pie_data as $perc) {

$arclen = (360 * $perc) / 100;

imagefilledarc($image, $cx,$cy, $a,$b, $langl, ($langl+$arclen), $col ,IMG_ARC_PIE);

$langl += $arclen; $col=$col-20000;

}

// flush image

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

imagepng($image);

imagedestroy($image);

?>

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

imagefill($img, Sx, Sy, Scolor);

$х и $y определяют местоположе­ние заменяемого цвета, а параметр $color представляет индекс цвета в палитре, который будет использован для замены. Эту функцию можно применять для многих целей; на­пример, в сценарии построения секторной диаграммы, для заливки каждого отдельного сектора различным цве­том (сохраняя черную кромку между соседними секторами).

Альтернативная функция, которая обладает более широкими возможностями — это функ­ция imagefilltoborder (). Ее синтаксис выглядит следующим образом:

imagefilltoborder($img,$х, Sy, Sborder, Scolor);

Эта функция выполнит заливку сплошного участка, определяемого не одним цветом, а цветом, определяемым параметром $border.

Работа с палитрой изображения

При работе с существующей палитрой может быть так, что требуемый цвет уже имеется в палитре. Для таких случаев расшире­ние GD предлагает функцию imagecolorexact ():

imagecolorexact($img, $red, $green, $blue);

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

imagecolorclosest($img_r, Sred, $green, Sblue);

Эта функция возвращает индекс цвета в палитре, который наиболее всего соответ­ствует требуе­мому цвету. Соответствие цвета определяется посредством отображения каждой тройки значений RGB цвета в палитре в трехмерной точке с координатами X, Y, Z (красный «Х, синий = Y, зеленый = Z). Затем таким же образом отображается требуе­мый цвет, и возвращается тот цвет, который математически оказывается наиболее близким х требуемому. Альтернативной функ­цией, которая обычно позволяет получить лучший результат (наиболее близкое сов­падение), является функция сопоставления цвета на основе его оттенка и насыщенно­сти белого и черного цветов — imagecolorclosesthwb():

imagecolorclosesthwb($img_r, $red, $green, $blue);

Для изображений, в которых нет "натуральных цветов" (изображения, в которых распределение цвета осуществлялось с помощью функции imagecreate(), а не imagecreatetruecolor ()), эта функция может вернуть значение -1, если ни один цвет еще не был распределен. А для изображений с натуральными цветами эта функция возвращает индекс требуемого цвета.

<?php //imagepr11.php

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

$img = imagecreate(WIDTH, HEIGHT);

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

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

$red = imagecolorallocate($img, 0xFF, 0, 0);

$green = imagecolorallocate($img, 0, 0xff, 0);

$blue = imagecolorallocate($img, 0, 0, 0xFF);

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

imagefilledrectangle($img, 20,20, WIDTH-1, HEIGHT-1, $red);

imagefilledrectangle($img, 40, 40, WIDTH-1, HEIGHT-1, $blue);

function getcolor($img, $red, $green, $blue) {

$color = imagecolorexact($img, $red, $green, $blue);

if($color == -1) {

$color = imagecolorallocate($img, $red, $green, $blue);

if($color == -1) {

$color = imagecolorclosest($img, $red, $green, $blue);

}

}

return $color;

}

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

imagepng($img);

imagedestroy($img);

//$ncolor=getcolor($img, $red, $green, $blue);

//echo $ncolor;

//$ncolor=imagecolorresolve($img, $red, $green, $blue);

//echo $ncolor;

?>

Функция imagecolorresolve () решает ту же задачу, что и функция getcolor () из предыдущего примера. Синтаксис этой функции представлен ниже:

imagecolorresolve(Simg_r, Sred, Sgreen, Sblue);

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

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