PHP / GD эффект размытия по Гауссу - PullRequest
10 голосов
/ 08 августа 2009

Мне нужно скрыть определенную область изображения с помощью 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));
    }
}

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

ImageFilter($image, IMG_FILTER_GAUSSIAN_BLUR);

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

Ответы [ 2 ]

12 голосов
/ 08 августа 2009

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

вроде как:

$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);
2 голосов
/ 08 августа 2009

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

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