php实现图片模糊,php如何实现图片模糊

php实现图片模糊的方法:首先创建一个PHP示例文件;然后定义一个“image_blur”类;接着创建“gaussian_blur”和“blur”方法;最后通过“$image_blur->gaussian_blur();”方法实现图片模糊。

634a11a388a66e27719afd48a42a6bcc.png

推荐:《PHP视频教程》

本文实例讲述了PHP实现生成模糊图片的方法。分享给大家供大家参考,具体如下:<?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();

$image_blur->gaussian_blur("./1.jpg",null,null,3);

?>

原图效果:

53b43492bc1dcff66a78e1ecc19b6d3c.png

生成模糊图片后的效果:

1925fc2c2edf53c6e9e8777965e9de77.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值