PHP/GD:更好的高斯模糊

SAF*_*FAD 14 php gd blur imagefilter

我想用GD库模糊图像,遗憾的是GD给出的GAUSSIAN_BLUR效果还不够,我想要的东西更模糊

<?php $im = imagecreatefrompng($_GET['image']);
if($im && imagefilter($im, IMG_FILTER_GAUSSIAN_BLUR))
{
  header('Content-Type: image/png');
    imagepng($im);
}
else
{
    echo 'fail';
}

imagedestroy($im);
Run Code Online (Sandbox Code Playgroud)

我想要这样的东西或至少在它附近. 来自//tutorial9.s3.amazonaws.com/uploads/2008/06/lens-blur.jpg的图片

And*_*iga 20

在遇到同样的问题之后,我几次应用了相同的过滤器,并且每次都应用于前一次"imagefilter"调用的结果资源.我得到了你想要的"更模糊"的效果.

例如:

for ($x=1; $x<=15; $x++)
   imagefilter($image, IMG_FILTER_GAUSSIAN_BLUR);
Run Code Online (Sandbox Code Playgroud)

  • 我已经习惯了这个,但这个速度令人难以忍受. (10认同)

JKi*_*rtz 13

你可以尝试卷积:

$gaussian = array(array(1.0, 2.0, 1.0), array(2.0, 4.0, 2.0), array(1.0, 2.0, 1.0));
imageconvolution($image, $gaussian, 16, 0);
Run Code Online (Sandbox Code Playgroud)

$gaussian 是一个矩阵,所以在数学上它是

[[1, 2, 1],
 [2, 4, 2],
 [1, 2, 1]]
Run Code Online (Sandbox Code Playgroud)

您可以在以下网址找到其他卷积滤镜:http://aishack.in/tutorials/image-convolution-examples/

imageconvolution( <image element>, <convolution matrix>, <divisor (sum of convolution matrix)>, <color offset>);
Run Code Online (Sandbox Code Playgroud)

所以从上面的代码1+2+1+2+4+2+1+2+1 = 16矩阵的总和.http://www.php.net/manual/en/function.imageconvolution.php#97921是获得除数之和的巧妙技巧.

有关此功能的更多信息,请查看http://php.net/manual/en/function.imageconvolution.php.

好时尚模糊是(1,2,1),(2,1,2),(1,2,1)

编辑: 如下所述,您可以在结果输出上多次运行任何过滤器,以增强效果.