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 相关文章推荐
用PHP函数解决SQL injection
Dec 09 PHP
两个开源的Php输出Excel文件类
Feb 08 PHP
解析php中static,const与define的使用区别
Jun 18 PHP
destoon调用自定义模板及样式的公告栏
Jun 21 PHP
PHP使用feof()函数读文件的方法
Nov 07 PHP
php中header跳转使用include包含解决参数丢失问题
May 08 PHP
PHP的关于变量和日期处理的一些面试题目整理
Aug 10 PHP
php简单获取复选框值的方法
May 11 PHP
Laravel的throttle中间件失效问题解决方法
Oct 09 PHP
php 5.4 全新的代码复用Trait详解
Jan 05 PHP
php 中奖概率算法实现代码
Jan 25 PHP
YII2框架中ActiveDataProvider与GridView的配合使用操作示例
Mar 18 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
全国FM电台频率大全 - 14 江西省
2020/03/11 无线电
JS实现php的伪分页
2008/05/25 PHP
PHP实现导出excel数据的类库用法示例
2016/10/15 PHP
javascript编程起步(第五课)
2007/02/27 Javascript
js中使用DOM复制(克隆)指定节点名数据到新的XML文件中的代码
2011/07/27 Javascript
基于RequireJS和JQuery的模块化编程——常见问题全面解析
2016/04/14 Javascript
JS实现table表格数据排序功能(可支持动态数据+分页效果)
2016/05/26 Javascript
seajs模块之间依赖的加载以及模块的执行
2016/10/21 Javascript
原生js获取浏览器窗口及元素宽高常用方法集合
2017/01/18 Javascript
jQuery实现字符串全部替换的方法【推荐】
2017/03/09 Javascript
vue 中自定义指令改变data中的值
2017/06/02 Javascript
详解nodejs实现本地上传图片并预览功能(express4.0+)
2017/06/28 NodeJs
jquery 给动态生成的标签绑定事件的几种方法总结
2018/02/24 jQuery
vue 地图可视化 maptalks 篇实例代码详解
2019/05/21 Javascript
JavaScript和TypeScript中的void的具体使用
2019/09/12 Javascript
Python编程中运用闭包时所需要注意的一些地方
2015/05/02 Python
对python字典元素的添加与修改方法详解
2018/07/06 Python
python pyheatmap包绘制热力图
2018/11/09 Python
tensorflow使用L2 regularization正则化修正overfitting过拟合方式
2020/05/22 Python
python把一个字符串切开的实例方法
2020/09/27 Python
全球最大的跑步用品商店:Road Runner Sports
2016/09/11 全球购物
美国知名的摄影器材销售网站:Adorama
2017/02/01 全球购物
Office DEPOT法国官网:欧迪办公用品采购
2018/01/03 全球购物
Pretty Green美国:英式摇滚服饰风格代表品牌之一
2019/01/23 全球购物
简历的自荐信
2013/12/19 职场文书
本科生职业生涯规划书范文
2014/01/21 职场文书
初中同学聚会邀请函
2014/02/03 职场文书
超市商业计划书
2014/05/04 职场文书
小学语文教研活动总结
2014/07/01 职场文书
2015年团支书工作总结
2015/04/03 职场文书
信仰纪录片观后感
2015/06/08 职场文书
热血教师观后感
2015/06/10 职场文书
2015年党建工作汇报材料
2015/06/25 职场文书
2016年11月份红领巾广播稿
2015/12/21 职场文书
导游词创作书写原则以及开场白技巧怎么学?
2019/09/25 职场文书
Python中的socket网络模块介绍
2022/07/23 Python