Фильтры и сглаживание
Фильтры
Функция imageFilter() применяет к изображению фильтр.
imageFilter (изображение, фильтр, арг1, арг2, арг3, арг4)
Конкретный фильтр указывается
при помощи константы. В функции применяется от нуля до четырёх аргументов,
влияющих на результат работы функции. Для каждого
фильтра аргументы имеют свой смысл. Фильтры перечислены
следующей таблице:
Фильтр |
Описание |
IMG_FILTER_GRAYSCALE |
Преобразует все цвета в градации серого. Аргументов не нужно. |
IMG_FILTER_COLORIZE |
Преобразует цвета в изображении в градации одного цвета. Нужный цвет указывается в системе RGB с помощью
трёх чисел от 0 до 255. Сначала насыщенность красного, затем насыщенность зелёного и насыщенность синего.
В четвёртом аргументе можно указать альфа-канал от 0 до 127 |
IMG_FILTER_BRIGHTNESS |
Меняет яркость. Уровень яркости указывается одним числом. |
IMG_FILTER_CONTRAST |
Меняет контрастность. Указывается одним числом |
IMG_FILTER_NEGATE |
Инвертирует цвета |
IMG_FILTER_MEAN_REMOVAL |
Усредняет цвета |
IMG_FILTER_EDGEDETECT |
Подсвечивает границы |
IMG_FILTER_SELECTIVE_BLUR |
Размывает картинку |
IMG_FILTER_GAUSSIAN_BLUR |
Размывает картинку методом Гаусса |
IMG_FILTER_SMOOTH |
Сглаживает границы объектов. Уровень гладкости указывается одним числом. |
IMG_FILTER_EMBOSS |
Добавляет рельеф |
IMG_FILTER_PIXELATE |
Пикселирование изображения. Всё изображение делится на маленькие прямоугольники и каждый прямоугольник
имеет только один цвет. Размер прямоугольника указывается одним числом. Если во втором аргументе
указать true, то применяется
усовершенствованное пикселирование с более
плавным переходом цвета. |
Создадим изображение, к которому будем применять фильтры:
1 2 3 4 5 6 7 8 9 10 11
12 13 14 15 16 17 18 19 |
<?php
header('Content-type: image/png');
$image = imageCreateTrueColor(500, 400);
$blue = imageColorAllocate($image, 0, 0, 170);
$white = imageColorAllocate($image, 255, 255, 255);
$fiol = imageColorAllocate($image, 160, 20, 200);
$yellow = imageColorAllocate($image, 255, 255, 80);
imageFilledRectangle($image, 0, 0, 499, 399, $white);
imageSetThickness($image, 5);
imageRectangle($image, 10, 10, 150, 90, $blue);
imageFilledEllipse($image, 230, 70, 120, 115, $yellow);
$points = array(
100, 100,
55, 200,
170, 210);
imagePolygon($image, $points, 3, $fiol);
imagepng($image);
imageDestroy($image);
?> |
Картинка получится такая:
Применим к изображению фильтр:
17 |
imagefilter($image, IMG_FILTER_GRAYSCALE); |
Результат:
Применим другой фильтр к первоначальному изображению.
17 |
imagefilter($image, IMG_FILTER_COLORIZE, 17, 185, 117); |
Результат будет такой:
Попробуйте использовать другие фильтры.
Сглаживание
Функция imageAntialias() производит сглаживание линий. Переходы
цвета между фигурами получаются более плавными. Оно имеет смысл при создании изображений, на которых есть
отдельные линии, например при рисовании графиков.
imageAntialias (изображение, использование)
Параметры:
изображение - дескриптор изображения
использование - если true, то сглаживание
применяется, если false, перестаёт применяться.
Сглаживание применяется только к тем фигурам, которые идут в коде скрипта после функции
imageAntialias(). Если для следующих фигур нужно отменить сглаживание, то нужно
ещё раз запустить функцию imageAntialias() и указать в ней
false.
Для сглаженных линий не применяется установка толщины.
Сравним обычную и сглаженную линии:
17 18 19 20 |
imagesetthickness($image, 1);
imageLine($image, 310, 15, 450, 40, $blue);
imageAntialias($image, true);
imageLine($image, 310, 35, 450, 60, $blue); |
Линии выглядят так:
Сглаживание имеет смысл применять только к тем фигурам, у которых оно действительно улучшает отображение.