базовый курс

ГРУППА КУРСА

Фильтры и сглаживание

Фильтры

Функция 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);

Линии выглядят так:

Фильтры

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