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脚本的10个技巧(5)
Oct 09 PHP
global.php
Dec 09 PHP
在JavaScript中调用php程序
Mar 09 PHP
php getimagesize 上传图片的长度和宽度检测代码
May 15 PHP
PHP生成excel时单元格内换行问题的解决方法
Aug 26 PHP
PHP开发需要注意的安全问题
Sep 01 PHP
浅析51个PHP处理字符串的函数
Aug 02 PHP
从PHP $_SERVER相关参数判断是否支持Rewrite模块
Sep 26 PHP
PHP英文字母大小写转换函数小结
May 03 PHP
PHP MySql增删改查的简单实例
Jun 21 PHP
浅谈php(codeigniter)安全性注意事项
Apr 06 PHP
php数值计算num类简单操作示例
May 15 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使用递归按层级查找数据的方法
2019/11/10 PHP
使用原生javascript创建通用表单验证——更锋利的使用dom对象
2011/09/13 Javascript
js/jquery解析json和数组格式的方法详解
2014/01/09 Javascript
SeaJS入门教程系列之使用SeaJS(二)
2014/03/03 Javascript
JS简单模拟触发按钮点击功能的方法
2015/11/30 Javascript
基于jquery实现图片相关操作(重绘、获取尺寸、调整大小、缩放)
2015/12/25 Javascript
Knockoutjs 学习系列(一)ko初体验
2016/06/07 Javascript
微信小程序 下拉菜单简单实例
2017/04/13 Javascript
纯JS实现简单的日历
2017/06/26 Javascript
js学习总结_选项卡封装(实例讲解)
2017/07/13 Javascript
JS实现微信摇一摇原理解析
2017/07/22 Javascript
Node.js + express基本用法教程
2019/03/14 Javascript
layer.prompt输入层的例子
2019/09/24 Javascript
Vue的click事件防抖和节流处理详解
2019/11/13 Javascript
[02:28]DOTA2亚洲邀请赛 LGD战队巡礼
2015/02/03 DOTA
[05:06]2017亚洲邀请赛DAC回顾片
2017/04/19 DOTA
[40:29]2018DOTA2亚洲邀请赛 4.7总决赛 LGD vs Mineski 第一场
2018/04/10 DOTA
使用Python的urllib和urllib2模块制作爬虫的实例教程
2016/01/20 Python
python之Character string(实例讲解)
2017/09/25 Python
Python中xrange与yield的用法实例分析
2017/12/26 Python
python-itchat 获取微信群用户信息的实例
2019/02/21 Python
Pandas库之DataFrame使用的学习笔记
2019/06/21 Python
python笔记_将循环内容在一行输出的方法
2019/08/08 Python
Python代理IP爬虫的新手使用教程
2019/09/05 Python
python中复数的共轭复数知识点总结
2020/12/06 Python
Hotels.com拉丁美洲:从豪华酒店到经济型酒店的预定优惠和折扣
2019/12/09 全球购物
Java Servlet API中forward() 与redirect()的区别
2014/04/20 面试题
2014年大学庆元旦迎新年活动方案
2014/03/09 职场文书
德语专业求职信
2014/03/12 职场文书
物业管理工作方案
2014/05/10 职场文书
开学典礼策划方案
2014/05/28 职场文书
保研导师推荐信
2015/03/25 职场文书
党小组推荐意见
2015/06/02 职场文书
电影圆明园观后感
2015/06/03 职场文书
「Manga Time Kirara MAX」2022年5月号封面公开
2022/03/21 日漫
Python OpenCV超详细讲解调整大小与图像操作的实现
2022/04/02 Python