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 相关文章推荐
不用数据库的多用户文件自由上传投票系统(2)
Oct 09 PHP
PHP生成网页快照 不用COM不用扩展.
Feb 11 PHP
如何设置mysql允许外网访问
Jun 04 PHP
php调用c接口无错版介绍
Mar 11 PHP
php上传图片存入数据库示例分享
Mar 11 PHP
Codeigniter发送邮件的方法
Mar 19 PHP
yii2分页之实现跳转到具体某页的实例代码
Jun 02 PHP
PHP入门教程之操作符与控制结构流程详解
Sep 09 PHP
PHP实现将多个文件中的内容合并为新文件的方法示例
Jun 10 PHP
php处理抢购类功能的高并发请求
Feb 08 PHP
Yii2 queue的队列使用详解
Jul 19 PHP
php 的多进程操作实践案例分析
Feb 28 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
基于mysql的论坛(7)
2006/10/09 PHP
Laravel中为什么不使用blpop取队列详析
2018/08/01 PHP
window.location和document.location的区别分析
2008/12/23 Javascript
跟着Jquery API学Jquery之一 选择器
2010/04/07 Javascript
js将iframe中控件的值传到主页面控件中的实现方法
2013/03/11 Javascript
js自动下载文件到本地的实现代码
2013/04/28 Javascript
js监听鼠标点击和键盘点击事件并自动跳转页面
2014/09/24 Javascript
javascript批量修改文件编码格式的方法
2015/01/27 Javascript
AngularJS学习笔记之ng-options指令
2015/06/16 Javascript
javascript实现倒计时(精确到秒)
2015/06/26 Javascript
HTML5 Shiv完美解决IE(IE6/IE7/IE8)不兼容HTML5标签的方法
2015/11/25 Javascript
jquery ztree实现右键收藏功能
2017/11/20 jQuery
vue 子组件向父组件传值方法
2018/02/26 Javascript
详解JS取出两个数组中的不同或相同元素
2019/03/20 Javascript
layui数据表格实现重载数据表格功能(搜索功能)
2019/07/27 Javascript
javascript 原型与原型链的理解及实例分析
2019/11/23 Javascript
JavaScript代码压缩工具UglifyJS和Google Closure Compiler的基本用法
2020/04/13 Javascript
让python json encode datetime类型
2010/12/28 Python
Python实现程序的单一实例用法分析
2015/06/03 Python
python使用MySQLdb访问mysql数据库的方法
2015/08/03 Python
python中input()与raw_input()的区别分析
2016/02/27 Python
Python自定义主从分布式架构实例分析
2016/09/19 Python
机器学习10大经典算法详解
2017/12/07 Python
shell命令行,一键创建 python 模板文件脚本方法
2018/03/20 Python
python pandas dataframe 按列或者按行合并的方法
2018/04/12 Python
python并发爬虫实用工具tomorrow实用解析
2019/09/25 Python
python通过SSH登陆linux并操作的实现
2019/10/10 Python
Python合并2个字典成1个新字典的方法(9种)
2019/12/19 Python
热能动力工程毕业生自荐信
2013/11/07 职场文书
费用会计岗位职责
2014/01/01 职场文书
心理健康日活动总结
2014/05/08 职场文书
2014房屋登记授权委托书
2014/10/13 职场文书
医生见习报告范文
2014/11/03 职场文书
教务处教学工作总结
2015/08/10 职场文书
「女孩的钓鱼慢活」全新版权绘公布
2022/03/21 日漫
动视暴雪取消疫苗禁令 让所有员工返回线下工作
2022/04/03 其他游戏