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 相关文章推荐
第四节 构造函数和析构函数 [4]
Oct 09 PHP
PHPShop存在多个安全漏洞
Oct 09 PHP
php中文字母数字验证码实现代码
Apr 25 PHP
PHP利用hash冲突漏洞进行DDoS攻击的方法分析
Mar 26 PHP
详解PHP中的Traits
Jul 29 PHP
php命令行(cli)模式下报require 加载路径错误的解决方法
Nov 23 PHP
Zend Framework开发入门经典教程
Mar 23 PHP
ThinkPHP简单使用memcache缓存的方法
Nov 15 PHP
php str_getcsv把字符串解析为数组的实现方法
Apr 05 PHP
php 使用 __call实现重载功能示例
Nov 18 PHP
PHP 范围解析操作符(::)用法分析【访问静态成员和类常量】
Apr 14 PHP
PHP7 其他语言层面的修改
Mar 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
使用adodb lite解决问题
2006/12/31 PHP
PHP+MYSQL开发工具及资源收藏
2007/01/02 PHP
PHP队列用法实例
2014/11/05 PHP
PHP使用PHPexcel导入导出数据的方法
2015/11/14 PHP
老生常谈PHP数组函数array_merge(必看篇)
2017/05/25 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
2020/02/16 PHP
JQuery 简便实现页面元素数据验证功能
2007/03/24 Javascript
javascript getElementsByTagName
2011/01/31 Javascript
ASP.NET jQuery 实例1(在TextBox里面创建一个默认提示)
2012/01/13 Javascript
javascript当中的代码嗅探扩展原生对象和原型(prototype)
2013/01/11 Javascript
javascript实现的一个随机点名功能
2014/08/26 Javascript
js在IE与firefox的差异集锦
2014/11/11 Javascript
AngularJS的一些基本样式初窥
2015/07/27 Javascript
使用 stylelint检查CSS_StyleLint
2016/04/28 Javascript
Bootstrap学习笔记之css组件(3)
2016/06/07 Javascript
AngularJs html compiler详解及示例代码
2016/09/01 Javascript
AngularJS 所有版本下载地址
2016/09/14 Javascript
微信小程序 scroll-view组件实现列表页实例代码
2016/12/14 Javascript
如何获取元素的最终background-color
2017/02/06 Javascript
NodeJS、NPM安装配置步骤(windows版本) 以及环境变量详解
2017/05/13 NodeJs
详细介绍RxJS在Angular中的应用
2017/09/23 Javascript
获取本机IP地址的实例(JavaScript / Node.js)
2017/11/24 Javascript
详解es6超好用的语法糖Decorator
2018/08/01 Javascript
js实现3D照片墙效果
2019/10/28 Javascript
vue3.0中使用element的完整步骤
2021/03/04 Vue.js
Python中实现从目录中过滤出指定文件类型的文件
2015/02/02 Python
用Python实现随机森林算法的示例
2017/08/24 Python
python爬虫selenium和phantomJs使用方法解析
2019/08/08 Python
详解python中的模块及包导入
2019/08/30 Python
Python 继承,重写,super()调用父类方法操作示例
2019/09/29 Python
在django admin中配置搜索域是一个外键时的处理方法
2020/05/20 Python
python 利用opencv实现图像网络传输
2020/11/12 Python
html5录音功能实战示例
2019/03/25 HTML / CSS
导游词之南京汤山温泉
2019/11/26 职场文书
Python关于OS文件目录处理的实例分享
2021/05/23 Python
SQL语句中JOIN的用法场景分析
2021/07/25 SQL Server