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 foreach 参数强制类型转换的问题
Dec 10 PHP
PHP之短标签开启设置
Jun 17 PHP
php连接Access数据库错误及解决方法
Jun 20 PHP
关于PHP语言构造器介绍
Jul 08 PHP
php数组操作之键名比较与差集、交集赋值的方法
Nov 10 PHP
Linux系统递归生成目录中文件的md5的方法
Jun 29 PHP
详解PHP错误日志的获取方法
Jul 20 PHP
php pthreads多线程的安装与使用
Jan 19 PHP
php实现的pdo公共类定义与用法示例
Jul 19 PHP
PHP双向链表定义与用法示例
Jan 31 PHP
php app支付宝回调(异步通知)详解
Jul 25 PHP
PHP 实现重载
Mar 09 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数组函数序列之array_slice() - 在数组中根据条件取出一段值,并返回
2011/11/07 PHP
php intval函数用法总结
2019/04/14 PHP
JavaScript的面向对象(二)
2006/11/09 Javascript
jQuery登陆判断简单实现代码
2013/04/21 Javascript
浅谈javascript中return语句
2015/07/15 Javascript
简单实现异步编程promise模式
2015/07/31 Javascript
JavaScript为事件句柄绑定监听函数实例详解
2015/12/15 Javascript
JavaScript学习笔记之数组去重
2016/03/23 Javascript
基于jQuery实现动态搜索显示功能
2016/05/05 Javascript
老生常谈jacascript DOM节点获取
2017/04/17 Javascript
React服务端渲染(总结)
2017/07/01 Javascript
记一次Vue.js混入mixin的使用(分权限管理页面)
2019/04/17 Javascript
vue+eslint+vscode配置教程
2019/08/09 Javascript
解决layui-table单元格设置为百分比在ie8下不能自适应的问题
2019/09/28 Javascript
[02:26]2018DOTA2亚洲邀请赛赛前采访-Newbee篇
2018/04/03 DOTA
[02:12]Dota 2 推出全新英雄—— 电炎绝手
2019/08/23 DOTA
Django中的“惰性翻译”方法的相关使用
2015/07/27 Python
python实现爬虫统计学校BBS男女比例之多线程爬虫(二)
2015/12/31 Python
Python如何快速上手? 快速掌握一门新语言的方法
2017/11/14 Python
Python实现PS滤镜Fish lens图像扭曲效果示例
2018/01/29 Python
对python创建及引用动态变量名的示例讲解
2018/11/10 Python
Python中一些深不见底的“坑”
2019/06/12 Python
Python转换时间的图文方法
2019/07/01 Python
flask应用部署到服务器的方法
2019/07/12 Python
python GUI库图形界面开发之PyQt5单行文本框控件QLineEdit详细使用方法与实例
2020/02/27 Python
使用matlab 判断两个矩阵是否相等的实例
2020/05/11 Python
Python如何根据时间序列数据作图
2020/05/12 Python
IFCHIC台湾:欧美国际设计师品牌
2019/05/18 全球购物
简述进程的启动、终止的方式以及如何进行进程的查看
2014/02/20 面试题
物流管理毕业生自荐信
2013/10/24 职场文书
护士试用期自我鉴定
2014/02/08 职场文书
协议书怎么写
2014/04/21 职场文书
中药学自荐信
2014/06/15 职场文书
成品仓库管理员岗位职责
2015/04/09 职场文书
村官2015年度工作总结
2015/10/14 职场文书
经典哲理警句:志不真则心不热,心不热则功不贤
2019/11/14 职场文书