базовый курс

ГРУППА КУРСА

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

Фильтры

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

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

Фильтры

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