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 相关文章推荐
使用sockets:从新闻组中获取文章(二)
Oct 09 PHP
对squid中refresh_pattern的一些理解和建议
Apr 17 PHP
Linux下手动编译安装PHP扩展的例子分享
Jul 15 PHP
phpword插件导出word文件时中文乱码问题处理方案
Aug 19 PHP
用php和jQuery来实现“顶”和“踩”的投票功能
Oct 13 PHP
PHP处理Ajax请求与Ajax跨域问题
Feb 13 PHP
PHP中模糊查询并关联三个select框
Jun 19 PHP
php生成毫秒时间戳的实例讲解
Sep 22 PHP
使用PHP+MySql实现微信投票功能实例代码
Sep 29 PHP
php实现微信支付之退款功能
May 30 PHP
实现PHP中session存储及删除变量
Oct 15 PHP
PHP设计模式之数据访问对象模式(DAO)原理与用法实例分析
Dec 12 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邮件专题
2006/10/09 PHP
mysql时区问题
2008/03/26 PHP
PHP加速 eAccelerator配置和使用指南
2009/06/05 PHP
给ECShop添加最新评论
2015/01/07 PHP
php实现常见图片格式的水印和缩略图制作(面向对象)
2016/06/15 PHP
PHP自定义函数实现数组比较功能示例
2017/10/19 PHP
在Windows上安装Node.js模块的方法
2011/09/25 Javascript
js类型转换与引用类型详解(Boolean_Number_String)
2014/03/07 Javascript
jQuery中:image选择器用法实例
2015/01/03 Javascript
JavaScript中字符串(string)转json的2种方法
2015/06/25 Javascript
javascript实现鼠标移到Image上方时显示文字效果的方法
2015/08/07 Javascript
js实现简单的选项卡效果
2017/02/23 Javascript
Bootstrap表单制作代码
2017/03/17 Javascript
微信小程序页面间通信的5种方式
2017/03/31 Javascript
Vue2 Vue-cli中使用Typescript的配置详解
2017/07/24 Javascript
jquery+css实现下拉列表功能
2017/09/03 jQuery
jquery实现楼层滚动效果
2018/01/01 jQuery
jQuery对底部导航进行跳转并高亮显示的实例代码
2019/04/23 jQuery
原生js实现九宫格拖拽换位
2021/01/26 Javascript
python实现异步回调机制代码分享
2014/01/10 Python
Python Tkinter基础控件用法
2014/09/03 Python
python版飞机大战代码分享
2018/11/20 Python
对pytorch网络层结构的数组化详解
2018/12/08 Python
Python基础学习之类与实例基本用法与注意事项详解
2019/06/17 Python
Nike加拿大官网:Nike.com (CA)
2019/04/09 全球购物
Charles & Colvard官网:美国莫桑石品牌
2019/06/05 全球购物
老师给学生的表扬信
2014/01/17 职场文书
《月迹》教学反思
2014/02/19 职场文书
联谊会主持词
2014/03/26 职场文书
2014年党员公开承诺书范文
2014/03/28 职场文书
会员卡清退活动总结
2014/08/27 职场文书
公务员培的训心得体会
2014/09/01 职场文书
2014年转正工作总结
2014/11/08 职场文书
2014年客房部工作总结
2014/11/22 职场文书
毕业实习单位意见
2015/06/04 职场文书
德生BCL3000抢先使用感受和评价
2022/04/07 无线电