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处理图片变得简单 基于gb库的图片处理类附实例代码下载
May 17 PHP
php 去除html标记--strip_tags与htmlspecialchars的区别详解
Jun 26 PHP
JS异常处理try..catch语句的作用和实例
May 05 PHP
PHP使用Mysql事务实例解析
Sep 08 PHP
完美解决thinkphp验证码出错无法显示的方法
Dec 09 PHP
简单谈谈php中的unicode和utf8编码
Jun 10 PHP
详解PHP的Yii框架中日志的相关配置及使用
Dec 08 PHP
php封装db类连接sqlite3数据库的方法实例
Dec 19 PHP
PHP给前端返回一个JSON对象的实例讲解
May 31 PHP
Laravel框架实现的记录SQL日志功能示例
Jun 19 PHP
php+layui数据表格实现数据分页渲染代码
Oct 26 PHP
PHP文件操作简单介绍及函数汇总
Dec 11 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
使用 MySQL Date/Time 类型
2008/03/26 PHP
php.ini save_handler 修改不生效的解决办法
2014/07/22 PHP
php计算两个日期相差天数的方法
2015/03/14 PHP
CI分页类首页、尾页不显示的解决方法
2016/03/28 PHP
Yii 2.0在Grid中格式化时间方法示例
2017/06/06 PHP
网页常用特效代码整理
2006/06/23 Javascript
JavaScript Array Flatten 与递归使用介绍
2011/10/30 Javascript
js实现的GridView即表头固定表体有滚动条且可滚动
2014/02/19 Javascript
jQuery实现Div拖动+键盘控制综合效果的方法
2015/03/10 Javascript
在JavaScript中使用对数Math.log()方法的教程
2015/06/15 Javascript
js学习阶段总结(必看篇)
2016/06/16 Javascript
javascript基础知识之html5轮播图实例讲解(44)
2017/02/17 Javascript
微信小程使用swiper组件实现图片轮播切换显示功能【附源码下载】
2017/12/12 Javascript
微信小程序绘制图片发送朋友圈
2019/07/25 Javascript
JS实现分页导航效果
2020/02/19 Javascript
从0搭建vue-cli4脚手架
2020/06/17 Javascript
js实现轮播图效果 纯js实现图片自动切换
2020/08/09 Javascript
在vue-cli3.0 中使用预处理器 (Sass/Less/Stylus) 配置全局变量操作
2020/08/10 Javascript
python使用装饰器和线程限制函数执行时间的方法
2015/04/18 Python
python使用socket向客户端发送数据的方法
2015/04/29 Python
Python实现的RSS阅读器实例
2015/07/25 Python
Python使用SocketServer模块编写基本服务器程序的教程
2016/07/12 Python
python对DICOM图像的读取方法详解
2017/07/17 Python
如何不用安装python就能在.NET里调用Python库
2019/07/12 Python
详解numpy1.19.4与python3.9版本冲突解决
2020/12/15 Python
JSP和EJB可以共享HttpSession么?EJB里面可以改变session里面的内容
2013/06/05 面试题
新闻专业个人求职信
2013/12/19 职场文书
母亲节演讲稿范文
2014/01/02 职场文书
《雷鸣电闪波尔卡》教学反思
2014/02/23 职场文书
普通大学毕业生自荐信范文
2014/02/23 职场文书
应届大学生求职信
2014/07/20 职场文书
学生会感恩节活动方案
2014/10/11 职场文书
2015教师见习期工作总结
2014/12/12 职场文书
2015年外联部工作总结
2015/04/03 职场文书
网络研修心得体会
2016/01/08 职场文书
PHP正则表达式之RCEService回溯
2022/04/11 PHP