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
数字转英文
Dec 06 PHP
AJAX for PHP简单表数据查询实例
Jan 02 PHP
php heredoc和phpwind的模板技术使用方法小结
Mar 28 PHP
php的日期处理函数及uchome的function_coomon中日期处理函数的研究
Jan 12 PHP
解决PHP超大文件下载,断点续传下载的方法详解
Jun 06 PHP
PHP网站开发中常用的8个小技巧
Feb 13 PHP
PHP微信开发之查询微信精选文章
Jun 23 PHP
PHP基于反射机制实现插件的可插拔设计详解
Nov 10 PHP
PHP使用mysqli操作MySQL数据库的简单方法
Feb 04 PHP
详解PHP使用Redis存储session时的一个Warning定位
Jul 05 PHP
PHP实现找出链表中环的入口节点
Jan 16 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对现有搜索引擎的调用
2013/06/25 PHP
php生出随机字符串
2017/07/06 PHP
学习YUI.Ext 第七天--关于View&amp;JSONView
2007/03/10 Javascript
CSS鼠标响应事件经过、移动、点击示例介绍
2013/09/04 Javascript
jQuery和AngularJS的区别浅析
2015/01/29 Javascript
coffeescript使用的方式汇总
2015/08/05 Javascript
纯css实现窗户玻璃雨滴逼真效果
2015/08/23 Javascript
js焦点文字滚动效果代码分享
2015/08/25 Javascript
Bootstrap每天必学之面板
2015/11/30 Javascript
jquery UI Datepicker时间控件的使用及问题解决
2016/04/28 Javascript
需灵活掌握的Bootstrap预定义排版类 你精通吗?
2016/06/20 Javascript
JavaScript面向对象分层思维全面解析
2016/11/22 Javascript
基于JavaScript实现购物车功能
2017/02/07 Javascript
基于bootstrap实现多个下拉框同时搜索功能
2017/07/19 Javascript
echarts鼠标覆盖高亮显示节点及关系名称详解
2018/03/17 Javascript
每个 JavaScript 工程师都应懂的33个概念
2018/10/22 Javascript
提升node.js中使用redis的性能遇到的问题及解决方法
2018/10/30 Javascript
vue element-ui实现动态面包屑导航
2019/12/23 Javascript
Vue实现点击导航栏当前标签后变色功能
2020/08/19 Javascript
js 实现碰撞检测的示例
2020/10/28 Javascript
JavaScript ES 模块的使用
2020/11/12 Javascript
JavaScript中Object、map、weakmap的区别分析
2020/12/15 Javascript
在vue项目中封装echarts的步骤
2020/12/25 Vue.js
剖析Python的Tornado框架中session支持的实现代码
2015/08/21 Python
Python使用smtplib模块发送电子邮件的流程详解
2016/06/27 Python
对web.py设置favicon.ico的方法详解
2018/12/04 Python
Django rest framework jwt的使用方法详解
2019/08/08 Python
浅谈python已知元素,获取元素索引(numpy,pandas)
2019/11/26 Python
python自动化办公操作PPT的实现
2021/02/05 Python
俄罗斯电子产品、计算机和家用电器购物网站:OLDI
2019/10/27 全球购物
英国领先的餐饮折扣俱乐部:Gourmet Society
2020/07/26 全球购物
内衣营销方案
2014/03/15 职场文书
村党支部对照检查材料思想汇报
2014/09/28 职场文书
python操作xlsx格式文件并读取
2021/06/02 Python
python实现简单石头剪刀布游戏
2021/10/24 Python
MySQL性能指标TPS+QPS+IOPS压测
2022/08/05 MySQL