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默认安装产生系统漏洞
Oct 09 PHP
PHP CodeBase:将时间显示为&quot;刚刚&quot;&quot;n分钟/小时前&quot;的方法详解
Jun 06 PHP
php setcookie(name, value, expires, path, domain, secure) 参数详解
Jun 28 PHP
PHP分页详细讲解(有实例)
Oct 30 PHP
php中session退出登陆问题
Feb 27 PHP
PHP遍历目录函数opendir()、readdir()、closedir()、rewinddir()总结
Nov 18 PHP
php_imagick实现图片剪切、旋转、锐化、减色或增加特效的方法
Dec 15 PHP
在openSUSE42.1下编译安装PHP7 的方法
Dec 24 PHP
PHP封装返回Ajax字符串和JSON数组的方法
Feb 17 PHP
PHP中的empty、isset、isnull的区别与使用实例
Mar 22 PHP
php/JS实现的生成随机密码(验证码)功能示例
Jun 06 PHP
Yii框架日志操作图文与实例详解
Sep 09 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环境搭建的详细步骤
2016/06/30 PHP
php上传后台无法收到数据解决方法
2019/10/28 PHP
Jquery 数据选择插件Pickerbox使用介绍
2012/08/24 Javascript
JavaScript中的this关键字介绍与使用实例
2013/06/21 Javascript
javascript中比较字符串是否相等的方法
2013/07/23 Javascript
jquery左右全屏大尺寸多图滑动效果代码分享
2015/08/28 Javascript
基于jQuery实现自动轮播旋转木马特效
2015/11/02 Javascript
javascript倒计时效果实现
2015/11/12 Javascript
js中Number数字数值运算后值不对的解决方法
2017/02/28 Javascript
Express+Nodejs 下的登录拦截实现代码
2017/07/01 NodeJs
手把手教你使用vue-cli脚手架(图文解析)
2017/11/08 Javascript
通过实例解析js简易模块加载器
2019/06/17 Javascript
JQuery通过键盘控制键盘按下与松开触发事件
2020/08/07 jQuery
关于vue-cli3打包代码后白屏的解决方案
2020/09/02 Javascript
[02:26]2016国际邀请赛8月3日开战 中国军团出征西雅图
2016/08/02 DOTA
python xml解析实例详解
2016/11/14 Python
Python正则表达式分组概念与用法详解
2017/06/24 Python
浅谈Tensorflow由于版本问题出现的几种错误及解决方法
2018/06/13 Python
解决win7操作系统Python3.7.1安装后启动提示缺少.dll文件问题
2019/07/15 Python
django多个APP的urls设置方法(views重复问题解决)
2019/07/19 Python
python3 selenium自动化测试 强大的CSS定位方法
2019/08/23 Python
如何获取Python简单for循环索引
2019/11/21 Python
opencv之颜色过滤只留下图片中的红色区域操作
2020/06/05 Python
NEW LOOK官网:英国时装零售巨头之一,快时尚品牌
2017/01/11 全球购物
美国最大的在线寄售和旧货店:Swap.com
2018/08/27 全球购物
捷克街头、运动和滑板一站式商店:BoardStar.cz
2019/10/06 全球购物
美体小铺法国官方网站:The Body Shop法国
2020/06/04 全球购物
汉语言文学毕业生求职信
2013/10/01 职场文书
优秀女职工事迹材料
2014/02/06 职场文书
理工学院学生自我鉴定
2014/02/23 职场文书
党的群众路线教育实践活动批评与自我批评发言稿
2014/10/16 职场文书
浅谈Python列表嵌套字典转化的问题
2021/04/07 Python
教你用Java Swing实现自助取款机系统
2021/06/11 Java/Android
Java使用Unsafe类的示例详解
2021/09/25 Java/Android
《艾尔登法环》发布最新「战技」宣传片
2022/04/03 其他游戏
Python中的协程(Coroutine)操作模块(greenlet、gevent)
2022/05/30 Python