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("./test2.jpg",null,null,3);

最新文章

  1. angularjs $scope.$watch(),监听值得变化
  2. [C] C语言中的布尔值
  3. iOS获取流量参考
  4. 使用Java练习算法常用的基本操作
  5. 利用Formdata实现form提交文件上传不跳转页面
  6. 原生JavaScript事件详解
  7. MAC SVN Phonegap
  8. rtmp协议介绍
  9. 通过实例来理解ajax
  10. Android线程之异步消息处理机制(三)——AsyncTask
  11. Warning: Attempt to present on whose view is not in模态跳转问题
  12. Oracle开发环境搭建
  13. 比较empty()与 isset()d的区别
  14. python与用户交互、数据类型
  15. activity select problem(greedy algorithms)
  16. 自动搭建ssm项目
  17. Makefile详解
  18. vmware中centos7设置静态IP
  19. Lambda多表联合
  20. JS-instanceof 与typeof

热门文章

  1. 有关图片上传的相关知识input type=file,HTML5的 input:file上传类型控制
  2. java面试6
  3. Oracle层次查询start with connect by
  4. innodb存储引擎之内存
  5. Web开发的分层结构与MVC模式
  6. 如何解决Win10系统更新显示0x80080300代码的错误?
  7. Oracle【三表的联合查询】
  8. 一、CentOS 7安装部署GitLab服务器
  9. three.js之元素周期表
  10. 自动化测试 selenium 测试软件安装