imagefilter

(PHP 5, PHP 7)

imagefilter — Применяет фильтр к изображению

Описание

imagefilter ( resource $image , int $filtertype , int $arg1 = ? , int $arg2 = ? , int $arg3 = ? , int $arg4 = ? ) : bool

imagefilter() применяет заданный фильтр filtertype к изображению image.

Список параметров

image

Ресурс изображения, возвращаемый одной из функций создания изображений, например, такой как imagecreatetruecolor().

filtertype

filtertype может быть одним из следующих:

  • IMG_FILTER_NEGATE: Инвертирует все цвета изображения.
  • IMG_FILTER_GRAYSCALE: Преобразует цвета изображения в градации серого путем преобразования компонент красного, зеленого и синего в их сумму с учетом весов, таких же как при вычислении яркости (Y') по REC.601. Альфа-канал сохраняется. Для изображений, использующих палитру, результат может отличаться в виду ограничений, накладываемых палитрой.
  • IMG_FILTER_BRIGHTNESS: Изменяет яркость изображения. Используйте аргумент arg1 для задания уровня яркости. Диапазон яркостей от -255 до 255.
  • IMG_FILTER_CONTRAST: Изменяет контрастность изображения. Используйте аргумент arg1 для задания уровня контрастности.
  • IMG_FILTER_COLORIZE: То же, что и IMG_FILTER_GRAYSCALE, за исключением того, что можно задать цвет. Используйте аргументы arg1, 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: Делает границы более плавными, а изображение менее четким. Используйте аргумент arg1 для задания уровня гладкости.
  • IMG_FILTER_PIXELATE: Применяет эффект пикселирования. Используйте аргумент arg1 для задания размера блока и аргумент arg2 для задания режима эффекта пикселирования.
  • IMG_FILTER_SCATTER: Применяет эффект рассеивания к изображению, используйте arg1 и arg2 для определения силы эффекта и дополнительно arg3 для применения только к выбранным цветам пикселей.

arg1

  • 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 в случае возникновения ошибки.

Список изменений

Версия Описание
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 
'Преобразование не удалось.';
}

imagedestroy($im);
?>

Пример #2 Пример использования imagefilter() с фильтром яркости

<?php
$im 
= imagecreatefrompng('sean.png');

if(
$im && imagefilter($im, IMG_FILTER_BRIGHTNESS, 20))
{
    echo 
'Яркость изображения изменена.';

    
imagepng($im, 'sean.png');
    
imagedestroy($im);
}
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');
    
imagedestroy($im);
}
else
{
    echo 
'Преобразование не удалось.';
}
?>

Пример #4 Пример использования imagefilter() с фильтром negate

<?php
// Определим нашу функцию, которую можно использовать в 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);
    
imagedestroy($im);
}
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);
imagedestroy($logo1);
imagedestroy($logo2);

// Вывод различий
header('Content-Type: image/png');
imagepng($output);
imagedestroy($output);
?>

Результатом выполнения данного примера будет что-то подобное:

Вывод примера: imagefilter() pixelate

Пример #6 Пример использования imagefilter() с фильтром scatter

<?php
// Загрузка изображения
$logo = imagecreatefrompng('./php.png');

// Применение очень мягкого эффекта рассеивания к изображению
imagefilter($logo, IMG_FILTER_SCATTER, 3, 5);

// Вывов изображения с эффектом рассеивания
header('Content-Type: image/png');
imagepng($logo);
imagedestroy($logo);
?>

Результатом выполнения данного примера будет что-то подобное:

Вывод примера: imagefilter() scatter

Примечания

Замечание: Результат IMG_FILTER_SCATTER всегда случайный.

Смотрите также

  • imageconvolution() - Наложение искривляющей матрицы 3х3, используя коэффициент и смещение