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 相关文章推荐
定制404错误页面,并发信给管理员的程序
Oct 09 PHP
优化PHP代码的53条建议
Mar 27 PHP
php adodb操作mysql数据库
Mar 19 PHP
php 字符过滤类,用于过滤各类用户输入的数据
May 27 PHP
php结合表单实现一些简单功能的例子
Jun 04 PHP
PHP实现服务器状态监控的方法
Dec 09 PHP
thinkPHP学习笔记之安装配置篇
Mar 05 PHP
php视频拍照上传头像功能实现代码分享
Oct 08 PHP
PHP用mb_string函数库处理与windows相关中文字符及Win环境下开启PHP Mb_String方法
Nov 11 PHP
php+ajax注册实时验证功能
Jul 20 PHP
php 猴子摘桃的算法
Jun 20 PHP
PHP使用file_get_contents发送http请求功能简单示例
Apr 29 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静态成员变量
2017/02/14 PHP
Yii2框架自定义类统一处理url操作示例
2019/05/25 PHP
YII2框架中添加自定义模块的方法实例分析
2020/03/18 PHP
JavaScript中的Window窗口对象
2008/01/16 Javascript
javascript iframe内的函数调用实现方法
2009/07/19 Javascript
两个比较有用的Javascript工具函数代码
2010/02/17 Javascript
iframe窗口高度自适应的又一个巧妙实现思路
2014/04/04 Javascript
jQuery和JavaScript节点插入元素的方法对比
2016/11/18 Javascript
jQGrid Table操作列中点击【操作】按钮弹出按钮层的实现代码
2016/12/05 Javascript
BootStrap Datepicker 插件修改为默认中文的实现方法
2017/02/10 Javascript
jQuery+datatables插件实现ajax加载数据与增删改查功能示例
2018/04/17 jQuery
JS控制只能输入数字并且最多允许小数点两位
2019/11/24 Javascript
Vue项目中数据的深度监听或对象属性的监听实例
2020/07/17 Javascript
vue动画—通过钩子函数实现半场动画操作
2020/08/09 Javascript
vue 判断页面是首次进入还是再次刷新的实例
2020/11/05 Javascript
[07:54]DOTA2-DPC中国联赛 正赛 iG vs VG 选手采访
2021/03/11 DOTA
[02:36]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Magma 选手采访
2021/03/11 DOTA
判断网页编码的方法python版
2016/08/12 Python
Python中的错误和异常处理简单操作示例【try-except用法】
2017/07/25 Python
Python使用matplotlib模块绘制图像并设置标题与坐标轴等信息示例
2018/05/04 Python
Python面向对象类的继承实例详解
2018/06/27 Python
Python3.5 Pandas模块之Series用法实例分析
2019/04/23 Python
python tkinter canvas使用实例
2019/11/04 Python
python爬虫爬取笔趣网小说网站过程图解
2019/11/18 Python
Pytorch中实现只导入部分模型参数的方式
2020/01/02 Python
Transpose 数组行列转置的限制方式
2020/02/11 Python
python访问hdfs的操作
2020/06/06 Python
联想马亚西亚官方网站:Lenovo Malaysia
2018/09/19 全球购物
介绍下WebSphere的安全性
2013/01/31 面试题
旅游与酒店管理的自我评价分享
2013/11/03 职场文书
影视艺术学院毕业生自荐信
2013/11/13 职场文书
零件设计自荐信范文
2013/11/27 职场文书
英语专业毕业生自荐信范文
2013/12/31 职场文书
运动会通讯稿300字
2014/02/02 职场文书
给老师的一封感谢信
2015/01/20 职场文书
上学路上观后感
2015/06/16 职场文书