批量图片处理,复制多份并重命名,可设置多种尺寸

浏览:1771 发布日期:2014/02/21 分类:技术分享 关键字: 图片批量处理
由于工作需要,要对网站50万用户头像进行处理,现找来一个类文件,配合自己写的小程序完美搭配!
本程序能批量复制图片、生成不同尺寸、重命名及分别存放。(注:我处理的全是正方形图片,其他图片未测试)
ResizeImages.class.php<?php
/*
 * 将本类放置于Org/Util目录下,再在 Controller 中实例化;
 * 源图片分多个文件夹存放,文件夹名需要是数字,并且使用连续的数字命名,存放多少自己定;本例中是1-100
 * 本程序运行在Thinkphp 3.2 版本下。
*/
namespace Org\Util;
class ResizeImage
{
    //图片类型
    var $type;
    //实际宽度
    var $width;
    //实际高度
    var $height;
    //改变后的宽度
    var $resize_width;
    //改变后的高度
    var $resize_height;
    //是否裁图
    var $cut;
    //源图象
    var $srcimg;
    //目标图象地址
    var $dstimg;
    //临时创建的图象
    var $im;

    function resizeimage($img, $wid, $hei,$c,$dstpath)
    {
        $this->srcimg = $img;
        $this->resize_width = $wid;
        $this->resize_height = $hei;
        $this->cut = $c;
        //图片的类型
   
        $this->type = strtolower(substr(strrchr($this->srcimg,"."),1));

        //初始化图象
        $this->initi_img();
        //目标图象地址
        $this -> dst_img($dstpath);
        //--
        $this->width = imagesx($this->im);
        $this->height = imagesy($this->im);
        //生成图象
        $this->newimg();
        ImageDestroy ($this->im);
    }
    
    function newimg()
    {
        //改变后的图象的比例
        $resize_ratio = ($this->resize_width)/($this->resize_height);
        //实际图象的比例
        $ratio = ($this->width)/($this->height);
        if(($this->cut)=="1")
        //裁图
        {
            if($ratio>=$resize_ratio)
            //高度优先
            {
                $newimg = imagecreatetruecolor($this->resize_width,$this->resize_height);
                imagecopyresampled($newimg, $this->im, 0, 0, 0, 0, $this->resize_width,$this->resize_height, (($this->height)*$resize_ratio), $this->height);
                ImageJpeg ($newimg,$this->dstimg);
            }
            if($ratio<$resize_ratio)
            //宽度优先
            {
                $newimg = imagecreatetruecolor($this->resize_width,$this->resize_height);
                imagecopyresampled($newimg, $this->im, 0, 0, 0, 0, $this->resize_width, $this->resize_height, $this->width, (($this->width)/$resize_ratio));
                ImageJpeg ($newimg,$this->dstimg);
            }
        }
        else
        //不裁图
        {
            if($ratio>=$resize_ratio)
            {
                $newimg = imagecreatetruecolor($this->resize_width,($this->resize_width)/$ratio);
                imagecopyresampled($newimg, $this->im, 0, 0, 0, 0, $this->resize_width, ($this->resize_width)/$ratio, $this->width, $this->height);
                ImageJpeg ($newimg,$this->dstimg);
            }
            if($ratio<$resize_ratio)
            {
                $newimg = imagecreatetruecolor(($this->resize_height)*$ratio,$this->resize_height);
                imagecopyresampled($newimg, $this->im, 0, 0, 0, 0, ($this->resize_height)*$ratio, $this->resize_height, $this->width, $this->height);
                ImageJpeg ($newimg,$this->dstimg);
            }
        }
    }
    
    //初始化图象
    function initi_img()
    {
        if($this->type=="jpg")
        {
            $this->im = imagecreatefromjpeg($this->srcimg);
        }
        if($this->type=="gif")
        {
            $this->im = imagecreatefromgif($this->srcimg);
        }
        if($this->type=="png")
        {
            $this->im = imagecreatefrompng($this->srcimg);
        }
    }
    
    //图象目标地址
    function dst_img($dstpath)
    {
        $full_length  = strlen($this->srcimg);

        $type_length  = strlen($this->type);
        $name_length  = $full_length-$type_length;

        $name         = substr($this->srcimg,0,$name_length-1);
        $this->dstimg = $dstpath;

        //echo $this->dstimg;
    }
}
?>
小程序:    function madeImgs()
    {
        set_time_limit(0);
        for($i=1;$i<100;$i++){
            $dir ='./Public/portrait/500000/'.$i.'/';    //读取源图片路径
            $files = glob($dir.'*.jpg');            //搜索指定类型的图片
            
            foreach($files as $v){
                $n = str_replace($dir,'',$v);        //把路径替换为空,只留下图片名称
                $resizeimage = new \Org\Util\ResizeImage($v, '24', '24', "0", './Public/portrait/'.$i.'/24_'.$n);
                $resizeimage = new \Org\Util\ResizeImage($v, '75', '75', "0", './Public/portrait/'.$i.'/75_'.$n);
                $resizeimage = new \Org\Util\ResizeImage($v, '130', '130', "0", './Public/portrait/'.$i.'/130_'.$n);
                //实例化ResizeImage对象,后面参数:1、源图片路径;2、图片宽度;3、图片高度;4、不用管;5、存放图片目录并且修改名称(加前缀)。
                //建议处理正方形图片,其他规格的图片我没有测试!
            }
        }
    }
最佳答案
评论( 相关
后面还有条评论,点击查看>>