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个组件
Oct 31 PHP
用PHP获取Google AJAX Search API 数据的代码
Mar 12 PHP
php radio 单选框获取与保持值的实现代码
May 15 PHP
php不用正则验证真假身份证
Nov 06 PHP
在Linux系统的服务器上隐藏PHP版本号的方法
Jun 06 PHP
PHP面向对象程序设计实例分析
Jan 26 PHP
php 流程控制switch的简单实例
Jun 07 PHP
PHP运用foreach神奇的转换数组(实例讲解)
Feb 01 PHP
Django 标签筛选的实现代码(一对多、多对多)
Sep 05 PHP
记Laravel调用Gin接口调用formData上传文件的实现方法
Dec 12 PHP
phpQuery采集网页实现代码实例
Apr 02 PHP
php在linux环境中如何使用redis详解
Dec 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
5.PHP的其他功能
2006/10/09 PHP
thinkPHP+PHPExcel实现读取文件日期的方法(含时分秒)
2016/07/07 PHP
PHP+AJAX 投票器功能
2017/11/11 PHP
PHP基于openssl实现的非对称加密操作示例
2019/01/11 PHP
dojo学习第一天 Tab选项卡 实现
2011/08/28 Javascript
非常强大的 jQuery.AsyncBox 弹出对话框插件
2011/08/29 Javascript
使用JQuery快速实现Tab的AJAX动态载入(实例讲解)
2013/12/11 Javascript
js实现的后台左侧管理菜单代码
2015/09/11 Javascript
jquery实现经典的淡入淡出选项卡效果代码
2015/09/22 Javascript
有关jQuery中parent()和siblings()的小问题
2016/06/01 Javascript
Angular 路由route实例代码
2016/07/12 Javascript
Javascript中作用域的详细介绍
2016/10/06 Javascript
Bootstrap实现的标签页内容切换显示效果示例
2017/05/25 Javascript
小程序兼容安卓和IOS数据处理问题及坑
2018/09/18 Javascript
javascript二维数组和对象的深拷贝与浅拷贝实例分析
2019/10/26 Javascript
Vue.extend 编程式插入组件的实现
2019/11/18 Javascript
关于numpy中np.nonzero()函数用法的详解
2017/02/07 Python
Python判断变量是否为Json格式的字符串示例
2017/05/03 Python
python 3.5下xadmin的使用及修复源码bug
2017/05/10 Python
python使用tensorflow保存、加载和使用模型的方法
2018/01/31 Python
基于python3 OpenCV3实现静态图片人脸识别
2018/05/25 Python
使用Python 统计高频字数的方法
2019/01/31 Python
python 基于TCP协议的套接字编程详解
2019/06/29 Python
h5页面唤起app如果没安装就跳转下载(iOS和Android)
2020/06/03 HTML / CSS
New Balance天猫官方旗舰店:始于1906年,百年慢跑品牌
2017/11/15 全球购物
Wojas罗马尼亚网站:波兰皮鞋品牌
2018/11/01 全球购物
为数据库创建索引都需要注意些什么
2012/07/17 面试题
庆元旦迎新年广播稿
2014/02/18 职场文书
同居协议书范本
2014/04/23 职场文书
学习十八大的心得体会
2014/09/01 职场文书
农村党支部书记四风问题个人对照检查材料
2014/09/21 职场文书
医生党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
投标承诺函范文
2015/01/21 职场文书
演讲稿:​快乐,从不抱怨开始!
2019/04/02 职场文书
python基础之匿名函数详解
2021/04/21 Python
Win11电脑显示本地时间与服务器时间不一致怎么解决?
2022/04/05 数码科技