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 相关文章推荐
一个很方便的 XML 类!!原创的噢
Oct 09 PHP
php下使用strpos需要注意 === 运算符
Jul 17 PHP
深入探讨PHP中的内存管理问题
Aug 31 PHP
PHP中如何判断AJAX提交的数据
Feb 05 PHP
PHP中$this和$that指针使用实例
Jan 06 PHP
PHP中判断文件存在使用is_file还是file_exists?
Apr 03 PHP
PHP实现通过正则表达式替换回调的内容标签
Jun 15 PHP
php使用MySQL保存session会话的方法
Jun 26 PHP
php利用ffmpeg提取视频中音频与视频画面的方法详解
Jun 07 PHP
Laravel 5.5基于内置的Auth模块实现前后台登陆详解
Dec 21 PHP
php从数据库读取数据,并以json格式返回数据的方法
Aug 21 PHP
PHP 图片处理
Sep 16 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
如何解决CI框架的Disallowed Key Characters错误提示
2013/07/05 PHP
php读取mysql中文数据出现乱码的解决方法
2013/08/16 PHP
php反射应用示例
2014/02/25 PHP
php静态文件生成类实例分析
2015/01/03 PHP
php实现字符串首字母转换成大写的方法
2015/03/17 PHP
PHP6新特性分析
2016/03/03 PHP
PHP高效获取远程图片尺寸和大小的实现方法
2017/10/20 PHP
php精度计算的问题解析
2019/06/21 PHP
javascript prototype原型操作笔记
2009/12/07 Javascript
学习javascript的闭包,原型,和匿名函数之旅
2015/10/18 Javascript
JavaScript中循环遍历Array与Map的方法小结
2016/03/12 Javascript
JS函数多个参数默认值指定方法分析
2016/11/28 Javascript
原生js和css实现图片轮播效果
2017/02/07 Javascript
用JavaScript和jQuery实现瀑布流
2017/03/19 Javascript
详解nodejs微信公众号开发——6.自定义菜单
2017/04/13 NodeJs
WebSocket实现简单客服聊天系统
2017/05/12 Javascript
微信小程序实现两个页面传值的方法分析
2018/12/11 Javascript
javascript原型链学习记录之继承实现方式分析
2019/05/01 Javascript
python爬虫入门教程--正则表达式完全指南(五)
2017/05/25 Python
python实现kmp算法的实例代码
2019/04/03 Python
对Python 简单串口收发GUI界面的实例详解
2019/06/12 Python
python数据库编程 ODBC方式实现通讯录
2020/03/27 Python
Python HTMLTestRunner可视化报告实现过程解析
2020/04/10 Python
Python实现发票自动校核微信机器人的方法
2020/05/22 Python
使用darknet框架的imagenet数据分类预训练操作
2020/07/07 Python
关于Kotlin中SAM转换的那些事
2020/09/15 Python
一款利用css3的鼠标经过动画显示详情特效的实例教程
2014/12/29 HTML / CSS
内容编辑个人求职信
2013/12/10 职场文书
人力资源部培训专员岗位职责
2014/01/02 职场文书
信访工作者先进事迹
2014/01/17 职场文书
《一个小村庄的故事》教学反思
2014/04/13 职场文书
交通安全标语
2014/06/06 职场文书
设立有限责任公司出资协议书
2014/11/01 职场文书
MBA推荐信怎么写
2015/03/25 职场文书
Springboot如何使用logback实现多环境配置?
2021/06/16 Java/Android
分享mysql的current_timestamp小坑及解决
2021/11/27 MySQL