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安装为Apache DSO
Oct 09 PHP
php中实现记住密码自动登录的代码
Mar 02 PHP
有关PHP中MVC的开发经验分享
May 17 PHP
php自动加载机制的深入分析
Jun 08 PHP
CodeIgniter框架提示Disallowed Key Characters的解决办法
Apr 21 PHP
Mac系统下使用brew搭建PHP(LNMP/LAMP)开发环境
Mar 03 PHP
php创建多级目录的方法
Mar 24 PHP
PHP的Socket通信之UDP通信实例
Jul 02 PHP
PHP实现适用于文件内容操作的分页类
Jun 15 PHP
Yii2中事务的使用实例代码详解
Sep 07 PHP
php获取今日开始时间和结束时间的方法
Feb 27 PHP
Laravel使用PHPQRCODE实现生成带有LOGO的二维码图片功能示例
Jul 07 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/06/24 PHP
session在PHP大型web应用中的使用
2011/06/25 PHP
基于initPHP的框架介绍
2013/04/18 PHP
推荐一款MAC OS X 下php集成开发环境mamp
2014/11/08 PHP
Yii学习总结之数据访问对象 (DAO)
2015/02/22 PHP
ExtJS4 组件化编程,动态加载,面向对象,Direct
2011/05/12 Javascript
jQuery点击弹出下拉菜单的小例子
2013/08/01 Javascript
用json方式实现在 js 中建立一个map
2014/05/02 Javascript
基于jQuery实现下拉框
2014/11/24 Javascript
自己动手手写jQuery插件总结
2015/01/20 Javascript
jquery实现简单的轮换出现效果实例
2015/07/23 Javascript
学习javascript文件加载优化
2016/02/19 Javascript
node.js实现端口转发
2016/04/14 Javascript
AngularJS基础 ng-href 指令用法
2016/08/01 Javascript
javascript按顺序加载运行js方法
2017/12/01 Javascript
vue中简单弹框dialog的实现方法
2018/02/26 Javascript
浅谈vuepress 踩坑记
2018/04/18 Javascript
javascript深拷贝、浅拷贝和循环引用深入理解
2018/05/27 Javascript
Vue配合iView实现省市二级联动的示例代码
2018/07/27 Javascript
LayUi数据表格自定义赋值方式
2019/10/26 Javascript
JS使用正则表达式实现常用的表单验证功能分析
2020/04/30 Javascript
[00:27]DOTA2荣耀之路2:Patience from zhou!
2018/05/24 DOTA
Matplotlib 绘制饼图解决文字重叠的方法
2020/07/24 Python
CSS3 按钮边框动画的实现
2020/11/12 HTML / CSS
英国网上花店:Bunches
2016/11/29 全球购物
美国网上购买眼镜:Eyeconic
2017/07/29 全球购物
印尼太阳百货公司网站:Matahari
2018/02/04 全球购物
大一学生假期实习的自我评价
2013/10/12 职场文书
秋季运动会稿件
2014/01/30 职场文书
幼儿园区域活动总结
2014/05/08 职场文书
群众路线个人对照检查材料2014
2014/09/26 职场文书
国际政治学专业推荐信
2014/09/26 职场文书
小学四年级班主任工作经验交流材料
2015/11/02 职场文书
2016继续教育培训学习心得体会
2016/01/19 职场文书
2019年思想汇报
2019/06/20 职场文书
赞美教师的句子
2019/09/02 职场文书