php 完美的批量生成缩略图代码
<!DOCTYPE HTML> <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 = "<?php return array('dir'=>'" . $dir . "','newdir'=>'" . $newdir . "','w'=>'" . $w . "','h'=>'" . $h . "'); ?>"; 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.phprm.com继 续 处 理 新 的 图 片 \"></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="<?php echo $c['dir'] ?>"> </label> <br><br> <label>保存到: <input name="newdir" type="text" id="newdir" value="<?php echo $c['newdir'] ?>"> </label> <br><br> <label>宽 高: <input name="w" type="text" id="w" value="<?php echo $c['w'] ?>" size="7" maxlength="3"> X <input name="h" type="text" id="h" value="<?php echo $c['h'] ?>" size="7" maxlength="3"> </label> <br> <br> <label> <input type="submit" name="search" id="search" value="生 成"> </label> </form> </div> ©2008 <a href="http://www.phprm.com" 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); } }
永久地址:http://www.phprm.com/code/94b2195aaf15899d3027faf066001500.html
转载随意~请带上教程地址吧^^