程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP基礎知識 >> php 完美的批量生成縮略圖代碼

php 完美的批量生成縮略圖代碼

編輯:PHP基礎知識
 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<TITLE>生成縮略圖</TITLE>
</HEAD>
<BODY>
<?php
$c = array('dir'=>'./images','newdir'=>'./thumb','w'=>'200','h'=>'200');
//只處理文件名中含有small的文件,如果處理所有文件,請設置為 '.'
$only = '.';

//如果不希望覆蓋已經存在的圖片 將此行設為0;
$over = 1;

//是否處理GIF圖,0為不處理
$regif = 1;

 

if($_GET['do']=='start'){
$file = array();
$dir = $_POST['dir'];
$newdir = $_POST['newdir'];
$w = intval($_POST['w']);
$h = intval($_POST['h']);
$d = @dir($dir) or die('目錄不存在!');
$config = "<?phpnreturn array('dir'=>'".$dir."','newdir'=>'".$newdir."','w'=>'".$w."','h'=>'".$h."');n?>";
savefile($c, $config);
while ($a=$d->read()){
$type = substr(strrchr($a,"."),1);
if($a!=='.' && $a!=='..'){
if(is_dir($dir.'/'.$a)){
$zdir[]=$a;
} elseif($type=='jpg' || $type=='gif' || $type=='bmp' || $type=='png') {
if(strstr($a, $only)){
$file[]=$dir.'/'.$a;
}
}
}
}
$rand = rand(100,999);
$img = new image($dir, $newdir);
$img->over = $over;
$img->regif= $regif;
echo "<div style='width:800px'>";
foreach ($file as $key){
$src = $img->reImg($key, $w, $h);
echo "<div style='float:left;border:#666666 1px dotted; width:$w px; height:$h px; padding: 5px; margin:5px;'><img src=$src?$rand></div>";
}
echo "</div>";
die("<br><br><label> <input name="go" type="button" id="go" onClick="location='index.php'" value=" www.111cn.net繼 續 處 理 新 的 圖 片 "></label><br><br>");
}
?>
<div style="clear:both; width:250px; height:110px; border:#006633 1px dashed; padding:5px; font-size:12px; color:#009933">
<form name="form1" method="post" action="?do=start">
<label>源目錄:
<input name="dir" type="text" id="dir" value="<?=$c['dir']?>">
</label>
<br><br>
<label>保存到:
<input name="newdir" type="text" id="newdir" value="<?=$c['newdir']?>">
</label>
<br><br>
<label>寬 &nbsp;高:
<input name="w" type="text" id="w" value="<?=$c['w']?>" size="7" maxlength="3">
X
<input name="h" type="text" id="h" value="<?=$c['h']?>" size="7" maxlength="3">
</label>
<br>
<br>
<label>
<input type="submit" name="search" id="search" value="生 成">
</label>
</form>

</div>
&copy;2008 <a href="http://www.111cn.net" target=_blank>wbsifan</a>
</BODY>
</HTML>
<?
<?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;
}
}

/**
* 轉換縮略圖www.111cn.net(文件名和結構不變)
*
* @ param mini(源地址, 寬度, 高度, 質量 )
* @ return 生成的地址
*/

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

 

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved