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 相关文章推荐
如何设置mysql允许外网访问
Jun 04 PHP
php获取网页标题和内容函数(不包含html标签)
Feb 03 PHP
PHP实现微信公众平台音乐点播
Mar 20 PHP
PHP把空格、换行符、中文逗号等替换成英文逗号的正则表达式
May 04 PHP
php程序员应具有的7种能力小结
Nov 27 PHP
Symfony页面的基本创建实例详解
Jan 26 PHP
php基础教程
Aug 26 PHP
支付宝服务窗API接口开发php版本
Jul 20 PHP
php+jQuery+Ajax简单实现页面异步刷新
Aug 08 PHP
php版微信公众平台之微信网页登陆授权示例
Sep 23 PHP
PHP编程实现脚本异步执行的方法
Aug 09 PHP
Laravel框架实现的记录SQL日志功能示例
Jun 19 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中抽象类和接口的概念以及区别
2013/06/27 PHP
thinkPHP中session()方法用法详解
2016/12/08 PHP
php实现商城购物车的思路和源码分析
2020/07/23 PHP
javascript实现动态增加删除表格行(兼容IE/FF)
2007/04/02 Javascript
JavaScript中json使用自己总结
2013/08/13 Javascript
node.js中的fs.writeFileSync方法使用说明
2014/12/14 Javascript
jQuery中removeProp()方法用法实例
2015/01/05 Javascript
jQuery左右滚动支持图片放大缩略图图片轮播代码分享
2015/08/26 Javascript
JavaScript对象数组的排序处理方法
2015/10/21 Javascript
jQuery实现弹窗居中效果类似alert()
2017/02/27 Javascript
JavaScript闭包的简单应用
2017/09/01 Javascript
详解.vue文件中style标签的几个标识符
2018/07/17 Javascript
原生js实现移动端Touch轮播图的方法步骤
2019/01/03 Javascript
Vue.js组件实现选项卡以及切换特效
2019/07/24 Javascript
微信小程序官方动态自定义底部tabBar的例子
2019/09/04 Javascript
Element Dialog对话框的使用示例
2020/07/26 Javascript
Vue 按照创建时间和当前时间显示操作(刚刚,几小时前,几天前)
2020/09/10 Javascript
[46:00]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#4EG VS Fnatic第一局
2016/03/03 DOTA
[00:43]魔廷新尊——痛苦女王至宝捆绑包
2020/06/12 DOTA
python实现的一个p2p文件传输实例
2014/06/04 Python
详解pyqt5 动画在QThread线程中无法运行问题
2018/05/05 Python
Python基于property实现类的特性操作示例
2018/06/15 Python
python2使用bs4爬取腾讯社招过程解析
2019/08/14 Python
Python函数的默认参数设计示例详解
2019/12/01 Python
浅析python 字典嵌套
2020/09/29 Python
python实现马丁策略回测3000只股票的实例代码
2021/01/22 Python
html5 video标签屏蔽右键视频另存为的js代码
2013/11/12 HTML / CSS
英国百安居装饰建材网上超市:B&Q
2016/09/13 全球购物
香蕉共和国Banana Republic官网:美国GAP旗下偏贵族风格服饰品牌
2016/11/21 全球购物
Erwin Müller穆勒家居瑞士官网:您整个家庭的邮购公司
2019/12/28 全球购物
品德评语大全
2014/05/05 职场文书
迎新生标语大全
2014/10/06 职场文书
精神文明建设汇报材料
2014/12/24 职场文书
2015年监理工作总结范文
2015/04/07 职场文书
如何利用Matlab制作一款真正的拼图小游戏
2021/05/11 Python
pd.drop_duplicates删除重复行的方法实现
2022/06/16 Python