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 socket(fsockopen)的应用实例分析
Jun 02 PHP
ThinkPHP使用心得分享-分页类Page的用法
May 15 PHP
php实现的支持断点续传的文件下载类
Sep 23 PHP
PHP生成不重复随机数的方法汇总
Nov 19 PHP
WordPress中获取指定分类及其子分类下的文章数目
Dec 31 PHP
PHP函数checkdnsrr用法详解(Windows平台用法)
Mar 21 PHP
CI框架中redis缓存相关操作文件示例代码
May 17 PHP
thinkphp jquery实现图片上传和预览效果
Jul 22 PHP
PHP示例演示发送邮件给某个邮箱
Apr 03 PHP
PHP 7.4中使用预加载的方法详解
Jul 08 PHP
PHP抽象类和接口用法实例详解
Jul 20 PHP
PHP unset函数原理及使用方法解析
Aug 14 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 simplexmlElement操作xml的命名空间实现代码
2011/01/04 PHP
PHP中使用unset销毁变量并内存释放问题
2012/07/05 PHP
谈谈关于php的优点与缺点
2013/04/11 PHP
关于php正则匹配汉字的方法介绍
2013/04/25 PHP
php类声明和php类使用方法示例分享
2014/03/29 PHP
php 模拟 asp.net webFrom 按钮提交事件实例
2014/10/13 PHP
php获取服务器操作系统相关信息的方法
2016/10/08 PHP
PHP简单实现遍历目录下特定文件的方法小结
2017/05/22 PHP
laravel 框架配置404等异常页面
2019/01/07 PHP
PHP+Oracle本地开发环境搭建方法详解
2019/04/01 PHP
javascript 数组排序函数sort和reverse使用介绍
2013/11/21 Javascript
jQuery.holdReady()方法用法实例
2014/12/27 Javascript
JavaScript模板引擎用法实例
2015/07/10 Javascript
jQuery使用animate实现ul列表项相互飘动效果示例
2016/09/16 Javascript
jQuery 添加样式属性的优先级别方法(推荐)
2017/06/08 jQuery
Angular中封装fancyBox(图片预览)遇到问题小结
2017/09/01 Javascript
bootstrap table合并行数据并居中对齐效果
2018/10/17 Javascript
JavaScript创建对象的四种常用模式实例分析
2019/01/11 Javascript
vue2.0中set添加属性后视图不能更新的解决办法
2019/02/22 Javascript
Python利用matplotlib生成图片背景及图例透明的效果
2017/04/27 Python
Python利用ORM控制MongoDB(MongoEngine)的步骤全纪录
2018/09/13 Python
python中for循环输出列表索引与对应的值方法
2018/11/07 Python
详解利用OpenCV提取图像中的矩形区域(PPT屏幕等)
2019/07/01 Python
Python3 实现减少可调用对象的参数个数
2019/12/20 Python
python3从网络摄像机解析mjpeg http流的示例
2020/11/13 Python
naturalizer加拿大官网:美国娜然女鞋
2017/04/04 全球购物
澳大利亚领先的在线礼品网站:Gifts Australia
2020/08/15 全球购物
中职生求职信
2014/07/01 职场文书
县长“四风”对照检查材料思想汇报
2014/10/05 职场文书
中学生旷课检讨书500字
2014/10/29 职场文书
商场营业员岗位职责
2015/04/14 职场文书
运动会通讯稿50字
2015/07/20 职场文书
导游词之青岛太清宫
2019/12/13 职场文书
Python并发编程实例教程之线程的玩法
2021/06/20 Python
Python各协议下socket黏包问题原理
2022/04/12 Python
SQL SERVER中的流程控制语句
2022/05/25 SQL Server