10

我需要使用 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);

但它模糊了整个画布,我的问题是我只想模糊一个特定区域。

4

2 回答 2

13

您可以将图像的特定部分复制到新图像中,在新图像上应用模糊并将结果复制回来。

有点像这样:

$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);
于 2009-08-08T13:31:45.917 回答
2

我没有检查 imagefilter 的文档,我不知道这是否不可能,或者是否有等效于将其应用于图像的(一部分)的方法。但假设没有,为什么不:

  1. 将要模糊的部分复制到新的(临时)GD 图像(无需将其写入磁盘,只需将其分配给新的临时变量即可)。
  2. 对这个临时图像应用高斯模糊滤镜。
  3. 将生成的(过滤后的)图像复制回它的来源(执行此操作的功能肯定在 GD 库中)
于 2009-08-08T13:31:59.647 回答