首页 / 个人笔记 /

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

2022-11-22 08:19:51个人笔记阅读 0

在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);
?>


猜你喜欢

  • 帝国CMS插件

    帝国CMS自动标题图片并随机插入正文内容的插件

    插件功能1、可以将文章标题自动设置为标题图片2、背景图片随机3、文字过多会自动变成2行,4,更多定制功能请联系站长定制5、php版本最高为7.1插件安装方法(请先备份网站)1、下载插件2、将插件上传至网站/e/extend/目录,3、找多张背景图片,将图片得宽度统一调整为500px,将图片放进src文件夹;4、访问网站地址/e/extend/autopic/action.php?pwd=36152

    2022-04-10 56
  • 帝国CMS插件

    帝国cms付费可复制+下载word插件+关注公众号下载功能

    本插件支持的支付接口:虎皮椒微信,虎皮椒支付宝温馨提示:接口开通需开通带H5支付功能帝国cms付费可复制插件功能1、付费复制内容2、付费正文内容转word下载3、关注公众号免费下载内容,可以定义每天下载次数,可以关闭。多个公众号随机。4、免费下载用完跳转到付费下载5、实现不用登陆即可付费下载或者复制6、插件没有改变程序核心代码7、可以统一资源价格,也可以单独为某篇资源价格8、插件是响应式,PC和移

    2022-04-14 56
  • 帝国CMS插件

    帝国CMS7.5自动定时审核发布插件和自动提交百度插件

    帝国CMS7.5自动定时审核发布插件插件功能1、可以自定义栏目审核顺序,2、可以指定每天审核总量3、依次每个栏目审核3条,知道审核完当天的数量插件教程1、上传目录autosh到/e/extend/目录,2、修改文件//自定义审核栏目顺序 可以不设置//$classlit="4";//PC百度token$yuming="http://www.mihua114.com";//结尾不带/$token="

    2022-04-10 56