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 相关文章推荐
Oracle Faq(Oracle的版本)
Oct 09 PHP
我用php+mysql写的留言本
Oct 09 PHP
第十二节--类的自动加载
Nov 16 PHP
php 搜索框提示(自动完成)实例代码
Feb 05 PHP
php中常用的预定义变量小结
May 09 PHP
php中OR与|| AND与&amp;&amp;的区别总结
Oct 26 PHP
php更新修改excel中的内容实例代码
Feb 26 PHP
PHP函数分享之curl方式取得数据、模拟登陆、POST数据
Jun 04 PHP
PHP OPP机制和模式简介(抽象类、接口和契约式编程)
Jun 09 PHP
PHP实现货币换算的方法
Nov 29 PHP
PHP与JavaScript针对Cookie的读写、交互操作方法详解
Aug 07 PHP
PHP中关于php.ini参数优化详解
Feb 28 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
笑谈配置,使用Smarty技术
2007/01/04 PHP
解析PHP提交后跳转
2013/06/23 PHP
php查询mssql出现乱码的解决方法
2014/12/29 PHP
php使用NumberFormatter格式化货币的方法
2015/03/21 PHP
Yii2实现ActiveForm ajax提交
2017/05/26 PHP
基于Laravel实现的用户动态模块开发
2017/09/21 PHP
解决Laravel无法使用COOKIE和SESSION的问题
2019/10/16 PHP
JS定时器实例
2013/04/17 Javascript
js鼠标及对象坐标控制属性详细解析
2013/12/14 Javascript
js获取select选中的option的text示例代码
2013/12/19 Javascript
javascript中createElement的两种创建方式
2015/05/14 Javascript
在浏览器中打开或关闭JavaScript的方法
2015/06/03 Javascript
JS基于面向对象实现的拖拽库实例
2015/09/24 Javascript
jQuery实现的文字hover颜色渐变效果实例
2016/02/20 Javascript
jQuery实现根据滚动条位置加载相应内容功能
2016/07/18 Javascript
深入理解Javascript中的观察者模式
2017/02/20 Javascript
利用n工具轻松管理Node.js的版本
2017/04/21 Javascript
详解Angular2组件之间如何通信
2017/06/22 Javascript
VUE 使用中踩过的坑
2018/02/08 Javascript
vue2.0实现列表数据增加和删除
2020/06/17 Javascript
[03:04]DOTA2英雄基础教程 影魔
2013/12/11 DOTA
Flask的图形化管理界面搭建框架Flask-Admin的使用教程
2016/06/13 Python
python中pandas.DataFrame排除特定行方法示例
2017/03/12 Python
Python3使用turtle绘制超立方体图形示例
2018/06/19 Python
python sklearn常用分类算法模型的调用
2019/10/16 Python
清除canvas画布内容(点擦除+线擦除)
2020/08/12 HTML / CSS
国外最大的眼镜网站:Coastal
2017/08/09 全球购物
跑步、骑行和铁人三项的高性能眼镜和服装:ROKA
2018/07/06 全球购物
应届生财务管理求职信
2013/11/06 职场文书
《都江堰》教学反思
2014/02/07 职场文书
表彰大会策划方案
2014/05/13 职场文书
2014年巴西世界杯口号
2014/06/05 职场文书
煤矿安全生产月活动总结
2014/07/05 职场文书
银行给客户的感谢信
2015/01/23 职场文书
小学运动会入场词
2015/07/18 职场文书
Python利用capstone实现反汇编
2022/04/06 Python