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);
Но это размывает весь холст, моя проблема в том, что я просто хочу размыть определенную область.
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);
Я не проверял документацию по imagefilter и не знаю, невозможно ли это или есть эквивалент применения этого к (части) изображения. Но если предположить, что нет, почему бы и нет:
- Скопируйте часть, которую вы хотите размыть, в новое (временное) изображение GD (не нужно записывать ее на диск, просто назначьте ее новой временной переменной).
- Примените фильтр размытия по Гауссу к этому временному изображению.
- Скопируйте полученное (отфильтрованное) изображение обратно туда, откуда оно было получено (функциональность для этого определенно есть в библиотеке GD)