首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PHP/GD :更好的高斯模糊

PHP/GD :更好的高斯模糊
EN

Stack Overflow用户
提问于 2011-08-30 15:28:06
回答 6查看 23.8K关注 0票数 14

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

代码语言:javascript
运行
复制
<?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);

我想要这样的东西,或者至少接近它。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-08-30 15:33:04

你可以试试卷积:

代码语言:javascript
运行
复制
$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);

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

代码语言:javascript
运行
复制
[[1, 2, 1],
 [2, 4, 2],
 [1, 2, 1]]

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

代码语言:javascript
运行
复制
imageconvolution( <image element>, <convolution matrix>, <divisor (sum of convolution matrix)>, <color offset>);

因此,从上面的代码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),(1,2,1)

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

票数 13
EN

Stack Overflow用户

发布于 2012-05-17 19:19:11

在遇到相同的问题后,我使用了相同的过滤器几次,每次都应用到前面的"imagefilter“调用的结果资源中。我得到了你想要的“更模糊”效果。

例如:

代码语言:javascript
运行
复制
for ($x=1; $x<=15; $x++)
   imagefilter($image, IMG_FILTER_GAUSSIAN_BLUR);
票数 20
EN

Stack Overflow用户

发布于 2015-05-25 07:01:53

试试这个:

代码语言:javascript
运行
复制
<?php
//
//fastblur function from image hosting and processing site http://hero-in.com
//

function blur($img, $radius=10)
{

if ($radius>100) $radius=100; //max radius
if ($radius<0) $radius=0; //nin radius

$radius=$radius*4;
$alphaStep=round(100/$radius)*1.7;
$width=imagesx($img);
$height=imagesy($img);
$beginX=floor($radius/2);
$beginY=floor($radius/2);


//make clean imahe sample for multiply
$cleanImageSample=imagecreatetruecolor($width, $height);
imagecopy($cleanImageSample, $img, 0, 0, 0, 0, $width, $height);


//make h blur
for($i = 1; $i < $radius+1; $i++)
{
$xPoint=($beginX*-1)+$i-1;
imagecopymerge($img, $cleanImageSample, $xPoint, 0, 0, 0, $width, $height, $alphaStep);
}
//make v blur
imagecopy($cleanImageSample, $img, 0, 0, 0, 0, $width, $height);
for($i = 1; $i < $radius+1; $i++)
{
$yPoint=($beginY*-1)+$i-1;
imagecopymerge($img, $cleanImageSample, 0, $yPoint, 0, 0, $width, $height, $alphaStep);
}
//finish
return $img;
imagedestroy($cleanImageSample); 
}

//example
$im = ImageCreateFromJpeg('image.jpg');
$im = blur($im,10);
imagejpeg($im)
imagedestroy($im);
?>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7245710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档