+ -
当前位置:首页 → 问答吧 → 用PHP批量生成图片缩略图

用PHP批量生成图片缩略图

时间:2008-10-22

来源:互联网

功能:批量将某一文件夹里符合要求的图片生成指定大小的缩略图,
并放置到新的文件夹里.

演示:
暂时关闭

下载 (51.89 KB)
2008-10-22 15:22


缩略图处理类的代码:
[php]
//创建目录(目录, [模式])
function mkdirs($l1, $l2 = 0777){
if(!is_dir($l1)){
  //如果目录不存在,递归建立
  mkdirs(dirname($l1), $l2);  
  return @mkdir($l1, $l2);
}
return true;
}
//保存文件(文件, [内容])
function savefile($l1, $l2=''){  
if(function_exists(file_put_contents)){
  file_put_contents($l1, $l2);
} else{
  $fp = @fopen($l1, 'wb');
  @fwrite($fp, $l2);
  fclose($fp);
}
}
//获取文件后缀(文件)
function getfix($l1){
return end(explode('.', $l1));
}
//是否为允许类型(当前, 允许)
function checkfix($l1, $l2){
if(!is_array($l2)){
  $l2 = explode(',', str_replace(' ', '', $l2));
}
return in_array($l1, $l2) ? 1 : 0;
}
class image{
//源地址
var $src;  
//新图路径(本地化后)
var $newsrc;
  
//允许的图类型
var $allowtype = array('.jpg','.gif','.png','.jpeg');  
//是否缩略GIF, 为0不处理
var $regif   = 0;
//是否保留源文件(1为保留, 0为MD5)
var $keep = 0;
//是否可以覆盖已存在的图片,为0则不可覆盖
var $over = 0;
   
//图片源目录
var $dir;
//处理后的目录
var $newdir;

function __construct($l1=null, $l2=null){
  $this->dir   = $l1 ? $l1 : "./images/temp";
  $this->newdir = $l2 ? $l2 : "./images/s";
}

function image($l1=null, $l2=null){
  $this->__construct($l1, $l2);
}

/**
  * 处理后的文件路径
  * 将源图片,MD5文件名后保存到新的目录里
  *
  * @ param  rename()
  * @ return 处理后的文件名
  */
function reName($src){
  //MD5后文件名(例如:3293okoe.gif)
  $l1 = substr(md5($src),10,10).strrchr($src,".");
  //处理后文件名
  $l1  = $this->w.'_'.$this->h.'_'.$l1;
  //返回处理后的地址
  return $this->newdir.'/'.$l1;
}

  
/**
  * 生成缩略图
  *
  * @ param  Mini(图片地址, 宽度, 高度, 质量)
  *   如果要保留原来的文件名,请设置 $o->keep = 1;
  * @ return 处理后的图片地址
  */
function Mini($src,$w,$h, $q=80){
  $this->src = $src;
  $this->w = $w;
  $this->h = $h;
  
  //是否处理GIF图
  if(strrchr($src, ".") == ".gif" && $this->regif == 0){
   return $this->src;
  }
  
  //是否保留原文件名,默认不保留
  if(!$this->keep){
   //改名后的文件地址
   $newsrc = $this->reName($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);  
  $ow = $arr[0];
  $oh = $arr[1];
  $ot = $arr[2];  
  switch($ot){
   case 1:
    $im = imagecreatefromgif($src);
    break;
   case 2:
    $im = imagecreatefromjpeg($src);
    break;
   case 3:
    $im = imagecreatefrompng($src);
    break;
   default:
    return 0;
  }
  //处理缩略图
  $nim = imagecreatetruecolor($w,$h);
  $k1 = round($h/$w,2);
  $k2 = round($oh/$ow,2);
  if ($k1<$k2){
   $oow = $ow;
   $ooh = round($ow*$k1);
   $sw = 0;
   $sh = ($oh-$ooh)/2;
  }
  else {
   $oow = $oh/$k1;
   $ooh = $oh;
   $sw = ($ow-$oow)/2;
   $sh = 0;
  }
  //生成图片
  if(function_exists(imagecopyresampled)){
   imagecopyresampled($nim,$im,0,0,$sw,$sh,$w,$h,$oow,$ooh);   
  }
  else {
   imagecopyresized($nim,$im,0,0,$sw,$sh,$w,$h,$oow,$ooh);
  }
  //处理后的目录是否存在
  if(!is_dir($this->newdir)){
   @mkdir($this->newdir);
  }
  //保存图片   
  switch($ot){
   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;   
}
   
/**
  * 保存网络图片
  *
  * @ param  getImg(源图)
  * @ return 保存后的本地址址(本地目录的MD5文件名)
  */
function getimg($l1){
  $l2 = $this->dir.'/'.substr(md5($l1),10,10).strrchr($l1,".");
  //文件存在,直接返回地址
  if(file_exists($l2)){   
   //echo "exits...";
   return $l2;
  }
  
  //开始获取文件,并返回新路径
  $img = file_get_contents($l1);     
  if($img){
   if(!is_dir($this->dir)){
    @mkdir($this->dir);
   }
   savefile($l2, $img);
   //echo "file_get..";
   return $l2;
  }   
}

/**
  * 转换缩略图(文件名和结构不变)
  *
  * @ param  mini(源地址, 宽度, 高度, 质量 )
  * @ return 生成的地址
  */

function reImg($src, $w, $h, $q=80){
  $this->keep = 1;
  return $this->Mini($src, $w, $h, $q);
}
}

[/php]

完整代码下载:

repic.rar (4.51 KB)

下载次数:499

2008-10-22 15:24

作者: 小鱼哥哥   发布时间: 2008-10-22

十分好。大呢感下给你分

作者: 逆雪寒   发布时间: 2008-10-22

不错谢谢分享

作者: anleeit   发布时间: 2008-10-22

,good。

作者: 青青   发布时间: 2008-10-23

作者: nianjin   发布时间: 2008-10-23

作者: heixiake   发布时间: 2008-10-23

写的不错,

作者: zuiw   发布时间: 2008-10-24

看了.演示的确很不错。

作者: teri   发布时间: 2008-10-26

good !!!!!!!!!!

作者: pandao   发布时间: 2008-10-27

作者: 0hudu   发布时间: 2008-10-29

收藏

作者: yingshiku   发布时间: 2008-10-31

非常感谢!

作者: promaker   发布时间: 2008-11-01

这参数命名真叫人犯晕

作者: linux521   发布时间: 2008-11-01

原帖由 网鬼 于 2008-11-1 20:10 发表
这参数命名真叫人犯晕
团队作品,我不这么写.
个人的东西,全是这样,$l1,$l2,$I1,$I2,$_a 这些是常用的
用着特别亲切

作者: 网鬼   发布时间: 2008-11-01

不错不错,顶一下

作者: 小鱼哥哥   发布时间: 2008-11-03

好东西呀!

作者: xoxooox   发布时间: 2008-11-07

看了一下,写的不错,但是出现了一个问题,有时候图像会丢失一部分

作者: 达达Dada   发布时间: 2008-11-07

作者: dongxin1390008   发布时间: 2008-12-04

顶起

作者: highjade   发布时间: 2008-12-04

不错,学习了,真的太爽了,收藏了

作者: ufwtiw   发布时间: 2008-12-14

恩,不错。
很好,很强大
谢谢

作者: olders   发布时间: 2008-12-15

这个东西看上去不错,收藏了!!





作者: lurkerming   发布时间: 2008-12-18

好东西啊,收藏了~

作者: sinopf   发布时间: 2008-12-20

不错

作者: leeshan   发布时间: 2008-12-22

好东西!!

作者: wangyl   发布时间: 2009-03-10

作者: naodai   发布时间: 2009-03-10

速度很慢...

作者: fgs123   发布时间: 2009-03-10

ecshop 那个批量生成的速度还不错 就是没有时间研究!

作者: 冯.于安   发布时间: 2009-09-14