PHP批量生成图片缩略图的方法


Posted in PHP onJune 18, 2015

本文实例讲述了PHP批量生成图片缩略图的方法。分享给大家供大家参考。具体如下:

<?php
//用PHP批量生成图片缩略图
 function mkdirs($dirname,$mode=0777)
 //创建目录(目录, [模式])
 {
  if(!is_dir($dirname))
  {
   mkdirs($dirname,$mode); //如果目录不存在,递归建立
   return mkdir($dirname,$mode);
  }
  return true;
 }
 function savefile($filename,$content='')
 //保存文件(文件, [内容])
 {
  if(function_exists(file_put_contents))
  {
   file_put_contents($filename,$content);
  }
  else
  {
   $fp=fopen($filename,"wb");
   fwrite($fp,$content);
   fclose($fp);
  }
 }
 function getsuffix($filename) //获取文件名后缀
 {
  return end(explode(".",$filename));
 }
 function checksuffix($filename,$arr) //是否为允许类型(当前, 允许)
 {
  if(!is_array($arr))
  {
   $arr=explode(",",str_replace(" ","",$arr));
  }
  return in_array($filename,$arr) ? 1 : 0;
 }
 class image
 {
  var $src; //源地址
  var $newsrc; //新图路径(本地化后)
  var $allowtype=array(".gif",".jpg",".png",".jpeg"); //允许的图片类型
  var $regif=0; //是否缩略GIF, 为0不处理
  var $keep=0; //是否保留源文件(1为保留, 0为MD5)
  var $over=0; //是否可以覆盖已存在的图片,为0则不可覆盖
  var $dir; //图片源目录
  var $newdir; //处理后的目录
  function __construct($olddir=null,$newdir=null)
  {
   $this->dir=$olddir ? $olddir : "./images/temp";
   $this->newdir=$newdir ? $newdir : "./images/s";
  }
  function reNames($src)
  {
   $md5file=substr(md5($src),10,10).strrchr($src,".");
   //MD5文件名后(例如:3293okoe.gif)
   $md5file=$this->w."_".$this->h."_".$md5file;
   //处理后文件名
   return $this->newdir."/".$md5file;
   //将源图片,MD5文件名后保存到新的目录里
  }
  function Mini($src,$w,$h,$q=80)
  //生成缩略图 Mini(图片地址, 宽度, 高度, 质量)
  {
   $this->src=$src;
   $this->w=$w;
   $this->h=$h;
   if(strrchr($src,".")==".gif" && $this->regif==0)
   //是否处理GIF图
   {
    return $this->src;
   }
   if($this->keep==0) //是否保留源文件,默认不保留
   {
    $newsrc=$this->reNames($src); //改名后的文件地址
   }
   else     //保持原名
   {
    $src=str_replace("\\","/",$src);
    $newsrc=$this->newdir.strrchr($src,"/");
   }
   if(file_exists($newsrc) && $this->over==0)
   //如果已存在,直接返回地址
   {
    return $newsrc;
   }
   if(strstr($src,"http://") && !strstr($src,$_SERVER['HTTP_HOST']))
   //如果是网络文件,先保存
   {
    $src=$this->getimg($src);
   }
   $arr=getimagesize($src); //获取图片属性
   $width=$arr[0];
   $height=$arr[1];
   $type=$arr[2];
   switch($type)
   {
    case 1:  //1 = GIF,
     $im=imagecreatefromgif($src);
     break;
    case 2:  //2 = JPG
     $im=imagecreatefromjpeg($src);
     break;
    case 3:  //3 = PNG
     $im=imagecreatefrompng($src);
     break;
    default:
     return 0;
   }
   //处理缩略图
   $nim=imagecreatetruecolor($w,$h);
   $k1=round($h/$w,2);
   $k2=round($height/$width,2);
   if($k1<$k2)
   {
    $width_a=$width;
    $height_a=round($width*$k1);
    $sw=0;
    $sh=($height-$height_a)/2;
   }
   else
   {
     $width_a=$height/$k1;
     $height_a=$height;
     $sw=($width-$width_a)/2;
     $sh = 0;
   }
   //生成图片
   if(function_exists(imagecopyresampled))
   {
    imagecopyresampled($nim,$im,0,0,$sw,$sh,$w,$h,$width_a,$height_a);
   }
   else
   {
    imagecopyresized($nim,$im,0,0,$sw,$sh,$w,$h,$width_a,$height_a);
   }
   if(!is_dir($this->newdir))
   {
    mkdir($this->newdir);
   }
   switch($type)  //保存图片
   {
    case 1:
     $rs=imagegif($nim,$newsrc);
     break;
    case 2:
     $rs=imagejpeg($nim,$newsrc,$q);
     break;
    case 3:
     $rs=imagepng($nim,$newsrc);
     break;
    default:
     return 0;
   }
   return $newsrc; //返回处理后路径
  }
  function getimg($filename)
  {
   $md5file=$this->dir."/".substr(md5($filename),10,10).strrchr($filename,".");
   if(file_exists($md5file))
   {
    return $md5file;
   }
   //开始获取文件,并返回新路径
   $img=file_get_contents($filename);
   if($img)
   {
    if(!is_dir($this->dir))
    {
     mkdir($this->dir);
    }
    savefile($md5file,$img);
    return $md5file;
   }
  }
  function reImg($src,$w,$h,$q)
  //转换缩略图(文件名和结构不变)
  {
   $this->keep=1;
   return $this->Mini($src,$w,$h,$q);
   //return 生成的地址
  }
 }
 $image=new image();
 echo $image->reImg("images/zht.jpg",75,75,80);
 echo "<br/>";
 echo $image->reImg("images/m8920.jpg",75,75,80);
 echo "<br/>";
 echo $image->getimg("./images/s/zht.jpg");
?>

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
php.ini中的php-5.2.0配置指令详解
Mar 27 PHP
php格式化工具Beautify PHP小小BUG
Apr 24 PHP
PHP关联数组的10个操作技巧
Jan 21 PHP
php中导出数据到excel时数字变为科学计数的解决方法
Feb 03 PHP
php连接mssql数据库的几种方法
Feb 21 PHP
PHP+jQuery实现自动补全功能源码
May 15 PHP
探讨PHP调用时间格式的参数详解
Jun 06 PHP
php排序算法实例分析
Oct 17 PHP
php变量与数组相互转换的方法(extract与compact)
Dec 02 PHP
浅谈thinkphp5 instance 的简单实现
Jul 30 PHP
thinkPHP实现基于ajax的评论回复功能
Jun 22 PHP
Laravel 登录后清空COOKIE的操作方法
Oct 14 PHP
基于php的CMS中展示文章类实例分析
Jun 18 #PHP
php实现的用户查询类实例
Jun 18 #PHP
php常用表单验证类用法实例
Jun 18 #PHP
php文件压缩之PHPZip类用法实例
Jun 18 #PHP
浅谈php中include文件变量作用域
Jun 18 #PHP
Apache连接PHP后无法启动问题解决思路
Jun 18 #PHP
php实现只保留mysql中最新1000条记录
Jun 18 #PHP
You might like
PHP 和 MySQL 基础教程(二)
2006/10/09 PHP
php设计模式小结
2013/02/15 PHP
PHP获取youku视频真实flv文件地址的方法
2014/12/23 PHP
微信公众平台开发之天气预报功能
2015/08/31 PHP
php使用正则验证中文
2016/04/06 PHP
php面试实现反射注入的详细方法
2019/09/30 PHP
JS获取页面input控件中所有text控件并追加样式属性
2013/02/25 Javascript
使用jQuery清空file文件域的解决方案
2013/04/12 Javascript
javascript中加号(+)操作符的一些神奇作用
2014/06/06 Javascript
HTML,CSS,JavaScript速查表推荐
2014/12/02 Javascript
javascript十六进制及二进制转化的方法
2015/05/06 Javascript
Node.js操作mysql数据库增删改查
2016/03/30 Javascript
javascript 动态样式添加的简单实现
2016/10/11 Javascript
Bootstrap3 图片(响应式图片&amp;图片形状)
2017/01/04 Javascript
AngulerJS学习之按需动态加载文件
2017/02/13 Javascript
微信小程序 页面传值详解
2017/03/10 Javascript
深入解析Vue 组件命名那些事
2017/07/18 Javascript
JQuery模拟实现网页中自定义鼠标右键菜单功能
2018/11/14 jQuery
javascript定时器的简单应用示例【控制方块移动】
2019/06/17 Javascript
基于mpvue的简单弹窗组件mptoast使用详解
2019/08/02 Javascript
Vue组件通信$attrs、$listeners实现原理解析
2020/09/03 Javascript
简单解决Python文件中文编码问题
2015/11/22 Python
python之Character string(实例讲解)
2017/09/25 Python
python中copy()与deepcopy()的区别小结
2018/08/03 Python
Python3实现对列表按元组指定列进行排序的方法分析
2018/12/22 Python
Python中list循环遍历删除数据的正确方法
2019/09/02 Python
python重要函数eval多种用法解析
2020/01/14 Python
python GUI库图形界面开发之PyQt5线程类QThread详细使用方法
2020/02/26 Python
Nayomi官网:沙特阿拉伯王国睡衣和内衣品牌
2020/12/19 全球购物
颇特女士香港官网:NET-A-PORTER香港
2021/03/08 全球购物
医学生职业规划范文
2014/01/05 职场文书
治超工作实施方案
2014/05/04 职场文书
社区平安建设方案
2014/05/25 职场文书
离婚协议书范本及离婚须知
2014/10/15 职场文书
海上钢琴师的观后感
2015/06/11 职场文书
2019银行竞聘书
2019/06/21 职场文书