PHP实现生成模糊图片的方法示例


Posted in PHP onDecember 21, 2017

本文实例讲述了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);
?>

原图效果:

PHP实现生成模糊图片的方法示例

生成模糊图片后的效果:

PHP实现生成模糊图片的方法示例

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
一个取得文件扩展名的函数
Oct 09 PHP
解析dedeCMS验证码的实现代码
Jun 07 PHP
PHP-Fcgi下PHP的执行时间设置方法
Aug 02 PHP
php生成图形验证码几种方法小结
Aug 15 PHP
PHP实现今天是星期几的几种写法
Sep 26 PHP
PHP实现的多彩标签效果代码分享
Aug 21 PHP
十大使用PHP框架的理由
Sep 26 PHP
解决ThinkPHP下使用上传插件Uploadify浏览器firefox报302错误的方法
Dec 18 PHP
Symfony2开发之控制器用法实例分析
Feb 05 PHP
php微信开发之自定义菜单完整流程
Oct 08 PHP
PHP中字符串长度的截取用法示例
Jan 12 PHP
PHP控制反转(IOC)和依赖注入(DI)
Mar 13 PHP
PHPCrawl爬虫库实现抓取酷狗歌单的方法示例
Dec 21 #PHP
在云虚拟主机部署thinkphp5项目的步骤详解
Dec 21 #PHP
php获取微信共享收货地址的方法
Dec 21 #PHP
php实现socket推送技术的示例
Dec 20 #PHP
PHP实现模拟http请求的方法分析
Dec 20 #PHP
php封装db类连接sqlite3数据库的方法实例
Dec 19 #PHP
PHP性能分析工具xhprof的安装使用与注意事项
Dec 19 #PHP
You might like
php站内搜索并高亮显示关键字的实现代码
2011/12/29 PHP
关于使用runtimeStyle属性问题讨论文章
2007/03/08 Javascript
表单切换,用回车键替换Tab健(不支持IE)
2011/07/20 Javascript
javascript解析json数据的3种方式
2014/05/08 Javascript
jQuery实现的输入框选择时间插件用法实例
2015/02/28 Javascript
JavaScript驾驭网页-CSS与DOM
2016/03/24 Javascript
iview给radio按钮组件加点击事件的实例
2017/09/30 Javascript
vue移动端UI框架实现QQ侧边菜单组件
2018/03/09 Javascript
js实现二级菜单点击显示当前内容效果
2018/04/28 Javascript
详解node.js的http模块实例演示
2018/07/12 Javascript
element-ui中的select下拉列表设置默认值方法
2018/08/24 Javascript
JavaScript鼠标悬停事件用法解析
2020/05/15 Javascript
在HTML中使用JavaScript的两种方法
2020/12/24 Javascript
Python3实现连接SQLite数据库的方法
2014/08/23 Python
Python类的用法实例浅析
2015/05/27 Python
Python实现的使用telnet登陆聊天室实例
2015/06/17 Python
python使用psutil模块获取系统状态
2016/08/27 Python
numpy排序与集合运算用法示例
2017/12/15 Python
Python3计算三角形的面积代码
2017/12/18 Python
Python正则表达式和re库知识点总结
2019/02/11 Python
Python实现手机号自动判断男女性别(实例解析)
2019/12/22 Python
Python对Tornado请求与响应的数据处理
2020/02/12 Python
Python+OpenCV实现图像的全景拼接
2020/03/05 Python
python读取mysql数据绘制条形图
2020/03/25 Python
基于PyTorch的permute和reshape/view的区别介绍
2020/06/18 Python
python删除文件、清空目录的实现方法
2020/09/23 Python
介绍一下Java中标识符的命名规则
2014/02/03 面试题
一套英文Java笔试题面试题
2016/04/21 面试题
交通安全演讲稿
2014/01/07 职场文书
财务会计大学生自我评价
2014/04/09 职场文书
基层党员群众路线整改措施及努力方向
2014/10/28 职场文书
捐助感谢信
2015/01/22 职场文书
起诉书格式范文
2015/05/20 职场文书
有关浪费资源的建议书
2015/09/14 职场文书
Java实现聊天机器人完善版
2021/07/04 Java/Android
使用logback实现按自己的需求打印日志到自定义的文件里
2021/08/30 Java/Android