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 相关文章推荐
win7+apache+php+mysql环境配置操作详解
Jun 10 PHP
php中如何使对象可以像数组一样进行foreach循环
Aug 09 PHP
基于preg_match_all采集后数据处理的一点心得笔记(编码转换和正则匹配)
Jan 31 PHP
PHP程序员常见的40个陋习,你中了几个?
Nov 20 PHP
php实现的通用图片处理类
Mar 24 PHP
在Debian系统下配置LNMP的教程
Jul 09 PHP
php+ajax无刷新上传图片的实现方法
Dec 06 PHP
利用PHP获取访客IP、地区位置、浏览器及来源页面等信息
Jun 27 PHP
PHP Socket网络操作类定义与用法示例
Aug 30 PHP
PHP使用Nginx实现反向代理
Sep 20 PHP
PHP实现的权重算法示例【可用于游戏根据权限来随机物品】
Feb 15 PHP
thinkphp框架类库扩展操作示例
Nov 26 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 图片上传类代码
2009/07/17 PHP
PHP调用JAVA的WebService简单实例
2014/03/11 PHP
PHP mkdir()无写权限的问题解决方法
2014/06/19 PHP
php中多维数组按指定value排序的实现代码
2014/08/19 PHP
PHP版本升级到7.x后wordpress的一些修改及wordpress技巧
2015/12/25 PHP
Swoole4.4协程抢占式调度器详解
2019/05/23 PHP
jquery last-child 列表最后一项的样式
2010/01/22 Javascript
ASP.NET jQuery 实例10 动态修改hyperlink的URL值
2012/02/03 Javascript
jquerymobile checkbox及时刷新才能获取其准确值
2012/04/14 Javascript
JavaScript 在网页上单击鼠标的地方显示层及关闭层
2012/12/30 Javascript
js封装可使用的构造函数继承用法分析
2015/01/28 Javascript
php结合imgareaselect实现图片裁剪
2015/07/05 Javascript
javascript日期处理函数,性能优化批处理
2015/09/06 Javascript
JavaScritp添加url参数并将参数加入到url中及更改url参数的方法
2015/10/26 Javascript
JS 组件系列之Bootstrap Table 冻结列功能IE浏览器兼容性问题解决方案
2017/06/30 Javascript
深入理解Node.js中通用基础设计模式
2017/09/19 Javascript
jquery ajaxfileuplod 上传文件 essyui laoding 效果【防止重复上传文件】
2018/05/26 jQuery
解决node-sass偶尔安装失败的方法小结
2018/12/05 Javascript
VUE+Element环境搭建与安装的方法步骤
2019/01/24 Javascript
Vue指令v-for遍历输出JavaScript数组及json对象的常见方式小结
2019/02/11 Javascript
vue-router 前端路由之路由传值的方式详解
2019/04/30 Javascript
layui table单元格事件修改值的方法
2019/09/24 Javascript
[01:07:20]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第二场 2月2日
2021/03/11 DOTA
python创建进程fork用法
2015/06/04 Python
Python实现包含min函数的栈
2016/04/29 Python
Python实现将数据写入netCDF4中的方法示例
2018/08/30 Python
PyCharm更改字体和界面样式的方法步骤
2019/09/27 Python
python取均匀不重复的随机数方式
2019/11/27 Python
html5中去掉input type date默认样式的方法
2018/09/06 HTML / CSS
美国精品家居用品网站:US-Mattress
2016/08/24 全球购物
环境卫生标语
2014/06/09 职场文书
财务务虚会发言材料
2014/10/20 职场文书
2014年个人工作总结模板
2014/12/15 职场文书
导游词之新疆-喀纳斯
2019/10/10 职场文书
CSS 使用 resize 实现图片拖拽切换预览功能(强大功能)
2021/08/23 HTML / CSS
一行Python命令实现批量加水印
2022/04/07 Python