PHP/GD 高斯模糊效果

发布于 2024-07-30 19:36:13 字数 508 浏览 1 评论 0原文

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

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

I need to obfuscate a certain area of an image using PHP and GD, currently I'm using the following code:

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));
    }
}

This basically replaces the selected area with squares of $pixel pixels. I want to accomplish some kind of blur (gaussian preferably) effect, I know I can use the ImageFilter() function:

ImageFilter($image, IMG_FILTER_GAUSSIAN_BLUR);

But it blurs the entire canvas, my problem is that I just want to blur a specific area.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

梦里梦着梦中梦 2024-08-06 19:36: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);

You can copy a specific part of the image into a new image, apply the blur on the new image and copy the result back.

Sort of like this:

$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);
路弥 2024-08-06 19:36:13

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

  1. 将要模糊的部分复制到新的(临时)GD 图像(无需将其写入磁盘,只需将其分配给新的临时变量)。
  2. 对此临时图像应用高斯模糊滤镜。
  3. 将生成的(已过滤的)图像复制回其来源位置(执行此操作的功能肯定在 GD 库中)

I did not check the documentation for imagefilter and I don't know if this is impossible or if there is an equivalent to applying this to (a part) of an image. But assuming there isn't, why not:

  1. Copy the part you want to blur to a new (temporary) GD image (no need to write it to disk, just assign it to a new temp variable).
  2. Apply gaussian blur filter to this temporary image.
  3. Copy the resulting (filtered) image right back where it came from (functionality to do this is definitely in the GD library)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文