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 相关文章推荐
apache+mysql+php+ssl服务器之完全安装攻略
Sep 05 PHP
PHP4和PHP5性能测试和对比 测试代码与环境
Aug 17 PHP
php下将图片以二进制存入mysql数据库中并显示的实现代码
May 27 PHP
php自动获取目录下的模板的代码
Aug 08 PHP
晋城吧对DiscuzX进行的前端优化要点
Sep 05 PHP
php页面防重复提交方法总结
Nov 25 PHP
php获取301跳转URL简单实例
Dec 16 PHP
php object转数组示例
Jan 15 PHP
php向js函数传参的几种方法
Aug 10 PHP
php利用事务处理转账问题
Apr 22 PHP
Zend Framework教程之请求对象的封装Zend_Controller_Request实例详解
Mar 07 PHP
php swoft框架实例用法
Dec 22 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利用百度ai实现文本和图片审核
2019/05/08 PHP
AutoSave/自动存储功能实现
2007/03/24 Javascript
基于jquery的finkyUI插件与Ajax实现页面数据加载功能
2010/12/03 Javascript
JQUERY1.6 使用方法四 检测浏览器
2011/11/23 Javascript
基于jQuery的动态增删改查表格信息,可左键/右键提示(原创自Zjmainstay)
2012/07/31 Javascript
使用jquery.validate自定义方法实现&quot;手机号码或者固话至少填写一个&quot;的逻辑验证
2014/09/01 Javascript
javascript引用赋值(地址传值)用法实例
2015/01/13 Javascript
jquery实现公告翻滚效果
2015/02/27 Javascript
js实现的鼠标滚轮滚动切换页面效果(类似360默认页面滚动切换效果)
2016/01/27 Javascript
jQuery实现拖动效果的实例代码
2017/06/25 jQuery
node.js的exports、module.exports与ES6的export、export default深入详解
2017/10/26 Javascript
详解NodeJs开发微信公众号
2018/05/25 NodeJs
JavaScript学习笔记之DOM基础操作实例小结
2019/01/09 Javascript
Vue实现购物车的全选、单选、显示商品价格代码实例
2019/05/06 Javascript
使用 JavaScript 创建并下载文件(模拟点击)
2019/10/25 Javascript
JS几个常用的函数和对象定义与用法示例
2020/01/15 Javascript
vue使用screenfull插件实现全屏功能
2020/09/17 Javascript
[05:00]TI9战队采访 - Royal Never Give Up
2019/08/20 DOTA
Python和perl实现批量对目录下电子书文件重命名的代码分享
2014/11/21 Python
给Python入门者的一些编程建议
2015/06/15 Python
python学习之面向对象【入门初级篇】
2017/01/21 Python
火车票抢票python代码公开揭秘!
2018/03/08 Python
便捷提取python导入包的属性方法
2018/10/15 Python
Python对象中__del__方法起作用的条件详解
2018/11/01 Python
django 基于中间件实现限制ip频繁访问过程详解
2019/07/30 Python
请介绍一下Ant
2016/07/22 面试题
公司年底活动方案
2014/08/17 职场文书
个人批评与自我批评发言稿
2014/09/28 职场文书
12.4全国法制宣传日活动方案
2014/11/02 职场文书
西湖英语导游词
2015/02/06 职场文书
2019毕业论文致谢词
2019/06/24 职场文书
分布式锁为什么要选择Zookeeper而不是Redis?看完这篇你就明白了
2021/05/21 Redis
刚学完怎么用Python实现定时任务,转头就跑去撩妹!
2021/06/05 Python
你喜欢篮球吗?Python实现篮球游戏
2021/06/11 Python
MySQL派生表联表查询实战过程
2022/03/20 MySQL
MySQL的prepare使用以及遇到的bug
2022/05/11 MySQL