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中文乱码
Nov 26 PHP
部署PHP项目应该注意的几点事项分享
Dec 20 PHP
destoon切换城市后实现logo旁边显示地区名称的方法
Aug 21 PHP
跟我学Laravel之快速入门
Oct 15 PHP
php获取当月最后一天函数分享
Feb 02 PHP
PHP版微信公众平台红包API
Apr 02 PHP
PHP里的单例类写法实例
Jun 25 PHP
总结对比php中的多种序列化
Aug 28 PHP
Yii2下session跨域名共存的解决方案
Feb 04 PHP
php解析mht文件转换成html的实例
Mar 13 PHP
PHP中soap用法示例【SoapServer服务端与SoapClient客户端编写】
Dec 25 PHP
PHP获取学生成绩的方法
Nov 17 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的安全
2006/10/09 PHP
php array_push()数组函数:将一个或多个单元压入数组的末尾(入栈)
2011/07/12 PHP
PHP面向对象之旅:深入理解static变量与方法
2014/01/06 PHP
解决Codeigniter不能上传rar和zip压缩包问题
2014/03/07 PHP
PHP中使用addslashes函数转义的安全性原理分析
2014/11/03 PHP
PHP开发注意事项总结
2015/02/04 PHP
降低PHP Redis内存占用
2017/03/23 PHP
php微信开发之关注事件
2018/06/14 PHP
php实现数组中出现次数超过一半的数字的统计方法
2018/10/14 PHP
php命名空间设计思想、用法与缺点分析
2019/07/17 PHP
JS获取URL中的参数数据
2013/12/05 Javascript
JavaScript中的console.time()函数详细介绍
2014/12/29 Javascript
微信小程序 网络API Websocket详解
2016/11/09 Javascript
微信小程序 input输入框详解及简单实例
2017/01/10 Javascript
[01:04:48]VGJ.S vs TNC Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
[01:00:13]完美世界DOTA2联赛 LBZS vs Forest 第一场 11.07
2020/11/09 DOTA
[33:28]完美世界DOTA2联赛PWL S3 PXG vs GXR 第三场 12.19
2020/12/24 DOTA
Python3写入文件常用方法实例分析
2015/05/22 Python
Python编程求质数实例代码
2018/01/31 Python
利用python为运维人员写一个监控脚本
2018/03/25 Python
python3+PyQt5实现拖放功能
2018/04/24 Python
在python tkinter中Canvas实现进度条显示的方法
2019/06/14 Python
python实现发送form-data数据的方法详解
2019/09/27 Python
Python3 搭建Qt5 环境的方法示例
2020/07/16 Python
html5通过postMessage进行跨域通信的方法
2017/12/04 HTML / CSS
HTML5 body设置全屏背景图片的示例代码
2020/12/08 HTML / CSS
俄罗斯大型在线书店:Читай-город
2019/10/10 全球购物
调解员先进事迹材料
2014/02/07 职场文书
酒店员工职业生涯规划
2014/02/25 职场文书
实验室的标语
2014/06/20 职场文书
行政秘书工作自我鉴定
2014/09/15 职场文书
2014年应急管理工作总结
2014/11/26 职场文书
学生个人评语大全
2015/01/04 职场文书
2016重阳节红领巾广播稿
2015/12/18 职场文书
pyqt5打包成exe可执行文件的方法
2021/05/14 Python
Go 内联优化让程序员爱不释手
2022/06/21 Golang