(PHP 5, PHP 7, PHP 8)
imagefilter — Применяет фильтр к изображению
Функция imagefilter() применяет фильтр
filter
к изображению image
.
image
Объект GdImage, который возвращает одна из функций, создающих изображения, например, imagecreatetruecolor().
filter
Параметр filter
принимает следующие значения:
IMG_FILTER_NEGATE
: Инвертирует все цвета изображения.
IMG_FILTER_GRAYSCALE
: Преобразует цвета изображения
в градации серого путём преобразования компонент красного, зелёного и синего
в их сумму с учётом весов, таких же как при вычислении яркости (Y') по рекомендации REC.601.
Альфа-канал сохраняется. Для изображений с палитрой результат
иногда отличается из-за ограничений, которые накладывает палитра.
IMG_FILTER_BRIGHTNESS
: Изменяет яркость изображения.
Уровень яркость устанавливают через параметр args
.
Диапазон яркости принимает значения от -255 до 255.
IMG_FILTER_CONTRAST
: Изменяет контрастность
изображения. Уровень контрастности устанавливают через параметр args
.
IMG_FILTER_COLORIZE
: То же, что
и IMG_FILTER_GRAYSCALE
, за исключением того,
что разрешается указать цвет. Аргументы args
,
arg2
и arg3
устанавливают
каналы red
, green
,
blue
, а аргумент arg4
устанавливает канал alpha
. Диапазон каждого канала
принимает значения от 0 до 255.
IMG_FILTER_EDGEDETECT
: Использует определение
границ для их подсветки.
IMG_FILTER_EMBOSS
: Добавляет рельеф.
IMG_FILTER_GAUSSIAN_BLUR
: Размывает изображение
методом Гаусса.
IMG_FILTER_SELECTIVE_BLUR
: Размывает изображение.
IMG_FILTER_MEAN_REMOVAL
: Использует усреднение
для достижения эффекта «эскиза».
IMG_FILTER_SMOOTH
: Делает границы более плавными,
а изображение менее чётким. Уровень гладкости устанавливают
через параметр args
.
IMG_FILTER_PIXELATE
: Применяет эффект
пикселирования. Размер блока устанавливают через параметр args
,
а режим эффекта пикселизации через параметр arg2
.
IMG_FILTER_SCATTER
: Применяет эффект рассеивания
к изображению. Силу эффекта определяют параметрами args
и arg2
,
а аргумент arg3
передают дополнительно, чтобы применить
эффект только к конкретным цветам пикселей.
args
IMG_FILTER_BRIGHTNESS
: Уровень яркости.
IMG_FILTER_CONTRAST
: Уровень контрастности.
IMG_FILTER_COLORIZE
: Значение красного компонента цвета.
IMG_FILTER_SMOOTH
: Уровень сглаживания.
IMG_FILTER_PIXELATE
: Размер блока в пикселях.
IMG_FILTER_SCATTER
: Уровень уменьшения эффекта.
Значению нельзя быть больше или равным уровню добавления эффекта, который установили
в параметре arg2
.
arg2
IMG_FILTER_COLORIZE
: Значение зелёного компонента цвета.
IMG_FILTER_PIXELATE
: Определяет, применять ли усовершенствованный
эффект пикселизации. Значение по умолчанию равняется false
.
IMG_FILTER_SCATTER
: Уровень добавления эффекта.
arg3
IMG_FILTER_COLORIZE
: Значение синего компонента цвета.
IMG_FILTER_SCATTER
: Необязательный массив значений индексации цвета
для применения эффекта.
arg4
IMG_FILTER_COLORIZE
: Альфа-канал, значение между
0 и 127. Значение 0 обозначает непрозрачность, а 127 соответствует абсолютной
прозрачности.
Функция возвращает true
, если выполнилась успешно, или false
, если возникла ошибка.
Функция выбрасывает ошибку ValueError,
если значение аргумента sub
или plus
приведёт к переполнению или недополнению
со значением IMG_FILTER_SCATTER
для параметра filter
.
Версия | Описание |
---|---|
8.4.0 |
Функция теперь выбрасывает ошибку ValueError,
если значение параметра sub или plus приведёт к переполнению или недополнению
со значением IMG_FILTER_SCATTER а для параметра filter .
|
8.0.0 |
Параметр image теперь ожидает экземпляр класса GdImage;
раньше параметр ждал корректный gd -ресурс (resource).
|
7.4.0 |
Добавили поддержку рассеивания — IMG_FILTER_SCATTER .
|
Пример #1 Пример наложения фильтра на изображение функцией imagefilter() с фильтром grayscale
<?php
$im = imagecreatefrompng('dave.png');
if ($im && imagefilter($im, IMG_FILTER_GRAYSCALE)) {
echo 'Изображение преобразовано к градациям серого.';
imagepng($im, 'dave.png');
} else {
echo 'Преобразование не удалось.';
}
?>
Пример #2 Пример наложения фильтра функцией imagefilter() с фильтром яркости
<?php
$im = imagecreatefrompng('sean.png');
if ($im && imagefilter($im, IMG_FILTER_BRIGHTNESS, 20)) {
echo 'Яркость изображения изменена.';
imagepng($im, 'sean.png');
} else {
echo 'Изменить яркость не удалось.';
}
?>
Пример #3 Пример наложения фильтра функцией imagefilter() с фильтром colorize
<?php
$im = imagecreatefrompng('philip.png');
/* R, G, B, so 0, 255, 0 is green */
if ($im && imagefilter($im, IMG_FILTER_COLORIZE, 0, 255, 0)) {
echo 'Изображение преобразовано к оттенкам зеленого.';
imagepng($im, 'philip.png');
} else {
echo 'Преобразование не удалось.';
}
?>
Пример #4 Пример наложения фильтра функцией imagefilter() с фильтром negate
<?php
// Определим функцию negate(), которую получится перенести в PHP
// без функции imagefilter()
function negate($im)
{
if (function_exists('imagefilter')) {
return imagefilter($im, IMG_FILTER_NEGATE);
}
for ($x = 0; $x < imagesx($im); ++$x) {
for ($y = 0; $y < imagesy($im); ++$y) {
$index = imagecolorat($im, $x, $y);
$rgb = imagecolorsforindex($index);
$color = imagecolorallocate($im, 255 - $rgb['red'], 255 - $rgb['green'], 255 - $rgb['blue']);
imagesetpixel($im, $x, $y, $color);
}
}
return (true);
}
$im = imagecreatefromjpeg('kalle.jpg');
if ($im && negate($im)) {
echo 'Изображение инвертировано успешно.';
imagejpeg($im, 'kalle.jpg', 100);
} else {
echo 'Инвертировать изображение не удалось.';
}
?>
Пример #5 Пример наложения фильтра функцией imagefilter() с фильтром pixelate
<?php
// Загрузка PHP логотипа, нам нужно 2 штуки
// для сравнения
$logo1 = imagecreatefrompng('./php.png');
$logo2 = imagecreatefrompng('./php.png');
// Подопытный экземпляр
$output = imagecreatetruecolor(imagesx($logo1) * 2, imagesy($logo1));
// Применение пикселирования к каждому изображению с размером блока в 3 пикселя
imagefilter($logo1, IMG_FILTER_PIXELATE, 3);
imagefilter($logo2, IMG_FILTER_PIXELATE, 3, true);
// Совмещение различий в выходном изображении
imagecopy($output, $logo1, 0, 0, 0, 0, imagesx($logo1) - 1, imagesy($logo1) - 1);
imagecopy($output, $logo2, imagesx($logo2), 0, 0, 0, imagesx($logo2) - 1, imagesy($logo2) - 1);
// Вывод различий
header('Content-Type: image/png');
imagepng($output);
?>
Вывод приведённого примера будет похож на:
Пример #6 Пример наложения фильтра функцией imagefilter() с фильтром scatter
<?php
// Загрузка изображения
$logo = imagecreatefrompng('./php.png');
// Применение очень мягкого эффекта рассеивания к изображению
imagefilter($logo, IMG_FILTER_SCATTER, 3, 5);
// Вывов изображения с эффектом рассеивания
header('Content-Type: image/png');
imagepng($logo);
?>
Вывод приведённого примера будет похож на:
Замечание: Результат фильтра
IMG_FILTER_SCATTER
всегда случайный.