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

Удаление и изменение цветов палитры

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

imagecolordeallocate($img, $color);

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

<?php //imagepr13

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

$img = imagecreate(WIDTH, HEIGHT);

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

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

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

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

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

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

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

imagecolordeallocate($img, $black);

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

// Get the color index for the background

$bg = imagecolorat($img, 0, 0);

// Set the backgrund to be blue

imagecolorset($img, $bg, 200,200, 255);

// Output the image to the browser

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

imagepng($img);

imagedestroy($img);

?>

Расширение GD позво­ляет напрямую заменять определенный индекс в палитре другим цветом с помощью функции imagecolorset():

imagecolorset($img, $color, $red, $green, $blue);

Параметры $red, $green и $blue — тройка значений RGB для замены цвета $color.

Создание прозрачности в изображениях

В PHP не поддерживаются прозрачные изображения в формате GIF, но формат PNG позволяет использовать прозрачные цвета. Для этого необходимо объявить распределенный на палитру цвет "прозрачным" с помощью функции imagecolortransparent():

imagecolortransparent($img [, $color])

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

Для данного изображения можно определить только один прозрачный цвет. Поэтому при повторном вызове функции imagecolortransparent () прозрачный цвет будет превращен в реальный цвет.

<?php //imagepr14

// Create a 150x30 image

$img = imagecreatetruecolor(150, 30);

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

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

// Make the background transparent

imagecolortransparent($img, $black);

// Draw a red rectangle

imagefilledrectangle($img, 4, 4, 150, 25, $red);

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

imagepng($img);

// Save the image

imagepng($img, './imagecolortransparent.png');

imagedestroy($img);

?>

Кроме рассмотренной функции возможно создание прозрачности с помощью альфа-смешивания цветов RGBA. Аббревиатура "RGBA" (Red, Green, Blue, Alpha) задает способ определения "прозрачных" цветов на основе тройки значений RGB. Цвета связаны посредством "альфа-уровня" , который лежит в диапазоне от 0 до 127 (от 0x0 до 0x7F), и соответствует степени прозрачности этого цвета при его помещении на холст.

Основой системы цветов RGBA является то, что когда цвет распределяется с помощью метода RGBA и помещается на холст, то цвет, который находится под закрашиваемой областью, не будет полностью удален. Наоборот, этот цвет будет комбинироваться со значением RGB помещаемого цвета для получения итогового цвета, отображаемого на холсте. Изображение должно содержать натуральные цвета, созданые с помощью РНР-функции imagecreatetruecolor ().

Для создания цвета RGBA используется функция:

imagecolorallocatealpha($img_r, $red, $green, $blue, $alpha);

Параметр $alpha может принимать значение от 0 (непрозрачный цвет) до 127 ( прозрачный цвет). Использование функции imagecolorallocatealpha ()

<?php //imagepr15

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

$img = imagecreatetruecolor(WIDTH, HEIGHT);

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

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

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

$blue_t = imagecolorallocatealpha($img, 0, 0, 0xFF, 0x40);

imagefill ($img, 1, 1, Swhite) ;

imageline($img, 0,0, WIDTH-1, HEIGHT-1, $blue_t);

imagefilledrectangle($img, (WIDTH/2)-50, (HEIGHT/2)-50,

(WIDTH/2)+50, (HEIGHT/2)+50, Syellow);

imagefilledrectangle($img, (WIDTH/2)-30, (HEIGHT/2)-30,

(WIDTH/2)+30, (HEIGHT/2)+30, $red);

imagefilledrectangle($img, 10, 10, WIDTH-11, HEIGHT-11, $blue_t);

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

imagepng($img);

?>

Три закрашенных прямоугольника были нарисованы поверх диагональной линии синего цвета. Как можно видеть, даже при том условии, что оба прямоугольника меньшего размера и линия были нарисованы еще до того, как был нарисован большой синий прямоугольник RGBА, видимыми остаются все три прямоугольника. Это объясняется тем, что во время рисования этого прямоугольника альфа-уровень составлял половину прозрачности (0x40 в шестнадцатеричной форме, 64 — в десятичной) и был смешан с цветами, поверх которых был нарисован этот прямоугольник. Благодаря этому и был получен визуальный эффект, при котором "сквозь" большой прямоугольник RGBA просматриваются остальные закрашенные формы, находящиеся за ним.

Помимо функции imagecolorallocatealpha(), расширение GD предлагает следующие функции для работы с цветами RGBA:

imagecolorallocatealpha(Simg_r, Sred, Sgreen, Sblue, Salpha); imagecolorexactalpha($img_r, Sred, Sgreen, Sblue, Salpha); imagecolorclosestalpha(Simg_r, Sred, Sgreen, Sblue, Salpha); imagecolorresolvealpha($img_r, Sred, Sgreen, Sblue, Salpha);

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