PHP/GD Эффект размытия по Гауссу


Мне нужно запутать определенную область изображения с помощью PHP и GD, в настоящее время я использую следующий код:

for ($x = $_GET['x1']; $x < $_GET['x2']; $x += $pixel)
{
    for ($y = $_GET['y1']; $y < $_GET['y2']; $y += $pixel)
    {
        ImageFilledRectangle($image, $x, $y, $x + $pixel - 1, $y + $pixel - 1, ImageColorAt($image, $x, $y));
    }
}

Это в основном заменяет выбранную область квадратами размером в $пикселей. Я хочу добиться какого-то эффекта размытия (предпочтительно гауссовского), я знаю, что могу использовать функцию ImageFilter():

ImageFilter($image, IMG_FILTER_GAUSSIAN_BLUR);

Но это размывает весь холст, моя проблема в том, что я просто хочу размыть определенную область.

Author: Alix Axel, 2009-08-08

2 answers

Вы можете скопировать определенную часть изображения в новое изображение, применить размытие к новому изображению и скопировать результат обратно.

Примерно так:

$image2 = imagecreate($width, $height);
imagecopy  ( $image2  , $image  , 0  , 0  , $x  , $y  , $width  , $height);
imagefilter($image, IMG_FILTER_GAUSSIAN_BLUR);
imagecopy ($image, $image2, $x, $y, 0, 0, $width, $height);
 12
Author: Scharrels, 2009-08-08 13:37:42

Я не проверял документацию по imagefilter и не знаю, невозможно ли это или есть эквивалент применения этого к (части) изображения. Но если предположить, что нет, почему бы и нет:

  1. Скопируйте часть, которую вы хотите размыть, в новое (временное) изображение GD (не нужно записывать ее на диск, просто назначьте ее новой временной переменной).
  2. Примените фильтр размытия по Гауссу к этому временному изображению.
  3. Скопируйте полученное (отфильтрованное) изображение обратно туда, откуда оно было получено (функциональность для этого определенно есть в библиотеке GD)
 2
Author: ChristopheD, 2009-08-08 13:31:59