详情页

php实现图片高斯模糊的方法 PHP生成模糊图片的代码

时间:2023年10月14日

编辑:佚名

在php中可以通过高斯算法实现图片的模糊,其实现的语句是“function gaussian_blur($srcImg,$savepath=null...$blurFactor=3){...}”,其中blurFactor的值代表模糊程度。
图片对比
正常图片
5
模糊后的图片
6
<!--?php
class image_blur{
    /**
     * 图片高斯模糊(适用于png/jpg/gif格式)
     * @param $srcImg 原图片
     * @param $savepath 保存路径
     * @param $savename 保存名字
     * @param $positon 模糊程度
     *
     *基于Martijn Frazer代码的扩充, 感谢 Martijn Frazer
     */
    public function gaussian_blur($srcImg,$savepath=null,$savename=null,$blurFactor=3){
    $gdImageResource=$this--->image_create_from_ext($srcImg);
    $srcImgObj=$this->blur($gdImageResource,$blurFactor);
    $temp = pathinfo($srcImg);
    $name = $temp['basename'];
    $path = $temp['dirname'];
    $exte = $temp['extension'];
    $savename = $savename ? $savename : $name;
    $savepath = $savepath ? $savepath : $path;
    $savefile = $savepath .'/'. $savename;
    $srcinfo = @getimagesize($srcImg);
    switch ($srcinfo[2]) {
        case 1: imagegif($srcImgObj, $savefile); break;
        case 2: imagejpeg($srcImgObj, $savefile); break;
        case 3: imagepng($srcImgObj, $savefile); break;
        default: return '保存失败'; //保存失败
    }
    return $savefile;
    imagedestroy($srcImgObj);
}
    /**
     * Strong Blur
     *
     * @param $gdImageResource 图片资源
     * @param $blurFactor 可选择的模糊程度
     * 可选择的模糊程度 0使用 3默认 超过5时 极其模糊
     * @return GD image 图片资源类型
     * @author Martijn Frazer, idea based on http://stackoverflow.com/a/20264482
     */
    private function blur($gdImageResource, $blurFactor = 3)
{
// blurFactor has to be an integer
    $blurFactor = round($blurFactor);
    $originalWidth = imagesx($gdImageResource);
    $originalHeight = imagesy($gdImageResource);
    $smallestWidth = ceil($originalWidth * pow(0.5, $blurFactor));
    $smallestHeight = ceil($originalHeight * pow(0.5, $blurFactor));
// for the first run, the previous image is the original input
    $prevImage = $gdImageResource;
    $prevWidth = $originalWidth;
    $prevHeight = $originalHeight;
// scale way down and gradually scale back up, blurring all the way
    for($i = 0; $i < $blurFactor; $i += 1)
    {
// determine dimensions of next image
        $nextWidth = $smallestWidth * pow(2, $i);
        $nextHeight = $smallestHeight * pow(2, $i);
// resize previous image to next size
        $nextImage = imagecreatetruecolor($nextWidth, $nextHeight);
        imagecopyresized($nextImage, $prevImage, 0, 0, 0, 0,
            $nextWidth, $nextHeight, $prevWidth, $prevHeight);
// apply blur filter
        imagefilter($nextImage, IMG_FILTER_GAUSSIAN_BLUR);
// now the new image becomes the previous image for the next step
        $prevImage = $nextImage;
        $prevWidth = $nextWidth;
        $prevHeight = $nextHeight;
    }
// scale back to original size and blur one more time
    imagecopyresized($gdImageResource, $nextImage,
        0, 0, 0, 0, $originalWidth, $originalHeight, $nextWidth, $nextHeight);
    imagefilter($gdImageResource, IMG_FILTER_GAUSSIAN_BLUR);
// clean up
    imagedestroy($prevImage);
// return result
    return $gdImageResource;
}
    private function image_create_from_ext($imgfile)
{
    $info = getimagesize($imgfile);
    $im = null;
    switch ($info[2]) {
        case 1: $im=imagecreatefromgif($imgfile); break;
        case 2: $im=imagecreatefromjpeg($imgfile); break;
        case 3: $im=imagecreatefrompng($imgfile); break;
    }
    return $im;
}
}
$image_blur = new image_blur();
echo $image_blur->gaussian_blur("5.jpg","D:\phpstudy_pro\WWW\cs.com\gs","6.jpg",6);
?>
相关文章
猜你需要