首页 > php代码 > php 完美的批量生成缩略图代码

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>宽 &nbsp;高:
<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>
&copy;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

转载随意~请带上教程地址吧^^

标签:none

发表留言