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 相关文章推荐
BBS(php &amp; mysql)完整版(二)
Oct 09 PHP
PHP Session_Regenerate_ID函数双释放内存破坏漏洞
Jan 27 PHP
PHP session会话的安全性分析
Sep 08 PHP
PHP中使用Imagick实现各种图片效果实例
Jan 21 PHP
CodeIgniter配置之autoload.php自动加载用法分析
Jan 20 PHP
Yii2中hasOne、hasMany及多对多关联查询的用法详解
Feb 15 PHP
php自定义函数实现统计中文字符串长度的方法小结
Apr 15 PHP
thinkphp 抓取网站的内容并且保存到本地的实例详解
Aug 25 PHP
PHP排序算法之快速排序(Quick Sort)及其优化算法详解
Apr 21 PHP
PHP中使用CURL发送get/post请求上传图片批处理功能
Oct 15 PHP
php字符串过滤strip_tags()函数用法实例分析
Jun 24 PHP
php 使用expat方式解析xml文件操作示例
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
香妃
2021/03/03 冲泡冲煮
水质对咖图啡风味的影响具体有哪些
2021/03/03 冲泡冲煮
php基础知识:控制结构
2006/12/13 PHP
PHP中include()与require()的区别说明
2010/03/10 PHP
有关PHP性能优化的介绍
2013/06/20 PHP
phpQuery让php处理html代码像jQuery一样方便
2015/01/06 PHP
jQuery 中使用JSON的实现代码
2011/12/01 Javascript
js 将json字符串转换为json对象的方法解析
2013/11/13 Javascript
javascript跑马灯抽奖实例讲解
2020/04/17 Javascript
javascript中不易分清的slice,splice和split三个函数
2016/03/29 Javascript
基于JS模仿windows文件按名称排序效果
2016/06/29 Javascript
谈谈因Vue.js引发关于getter和setter的思考
2016/12/02 Javascript
react.js 翻页插件实例代码
2017/01/19 Javascript
jQuery插件echarts设置折线图中折线线条颜色和折线点颜色的方法
2017/03/03 Javascript
简单的JS控制button颜色随点击更改的实现方法
2017/04/17 Javascript
jQuery树插件zTree使用方法详解
2017/05/02 jQuery
微信小程序实现顶部普通选项卡效果(非swiper)
2020/06/19 Javascript
jQuery实现用户信息表格的添加和删除功能
2017/09/12 jQuery
详解微信小程序文件下载--视频和图片
2019/04/24 Javascript
vue实现一个6个输入框的验证码输入组件功能的实例代码
2020/06/29 Javascript
JS实现公告上线滚动效果
2021/01/10 Javascript
[02:08]2014DOTA2国际邀请赛 430专访:力争取得小组前二
2014/07/11 DOTA
python pygame实现滚动横版射击游戏城市之战
2019/11/25 Python
在Python中利用pickle保存变量的实例
2019/12/30 Python
解决keras,val_categorical_accuracy:,0.0000e+00问题
2020/07/02 Python
如何基于python实现年会抽奖工具
2020/10/20 Python
jupyter notebook 写代码自动补全的实现
2020/11/02 Python
Python偏函数实现原理及应用
2020/11/20 Python
Toppik顶丰增发纤维官网:解决头发稀疏
2017/12/30 全球购物
清洁工岗位职责
2014/01/29 职场文书
《悯农》教学反思
2014/04/28 职场文书
计划生育工作汇报
2014/10/28 职场文书
区域经理岗位职责
2015/02/02 职场文书
2015年教师节感恩寄语
2015/03/23 职场文书
Springboot集成阿里云OSS上传文件系统教程
2021/06/28 Java/Android
python 判断文件或文件夹是否存在
2022/03/18 Python