CI框架重新生成图片(递归文件)

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

set_time_limit(0);

class Img_build  extends CI_Controller{
   
    private  static $img_path =    'upload_old/';    
    private  static $new_path =    'upload/';


    function __construct()
    {
            parent::__construct();
    }
    
    /**
     * 获取需要读取的路径的信息
     * $map =  array (
     *                  '路径名' => array (文件1, 文件2, 文件3)         
     *         )
     */
    public function index()
    {
        $this->load->helper('directory');
        //读取路径的信息
        $map = directory_map(self::$img_path, FALSE, TRUE);            

        echo "<pre>";
        print_r($map);
        echo "</pre>";
        
        if(!empty($map) &&  is_array($map))
        {
            $this->build_path($map);
        }

        
    }


    /**
     * 递归生成相应的路径
     * @param array $map
     */
    private function build_path($map = array())
    { 
        if(!file_exists(self::$new_path))
        {
            mkdir(self::$new_path, 0777);
        }


        foreach($map as $key => $val)
        {
           $old_img_path = self::$img_path;
           $old_tmp_path = self::$img_path.$key.'/';

           $new_img_path = self::$new_path;
           $new_tmp_path = self::$new_path.$key.'/';
           
           
            if(is_dir($old_tmp_path))
            {
                //echo $new_tmp_path;
                if(!file_exists($new_tmp_path))
                {
                    mkdir($new_tmp_path, 0777);
                }

                self::$img_path = $old_tmp_path;
                self::$new_path = $new_tmp_path;
                
                echo 'path:'.self::$img_path."<hr>";

                $this->load->helper('directory');
                $c_map = directory_map($old_tmp_path, FALSE, TRUE);


//                     echo "<pre>";
//                     print_r($c_map);
//                     echo "</pre>";                   

                if(!empty($c_map)  &&  is_array($c_map))
                {
                    $this->build_path($c_map);
                }
                
            }

            if(is_file(self::$img_path.$val))
            {
                echo 'file:'.self::$img_path.$val."<hr>";
                
                $img = array();
                $img['source_image'] = self::$img_path.$val;
                $img['new_image']    = self::$new_path.$val;
                $this->build_img($img);
            }

            self::$img_path = $old_img_path;
            self::$new_path = $new_img_path;

        }
    }

    /**
     * 根据原图片生成新的图片
     * @param array $img
     * $img = array('source_image'=> '原图片的路径', 'new_image' => '新图片路径')
     */
    private function build_img($img = array())
    {    
        if(!is_array($img) || empty($img))
        {
            return FALSE;
        }

        //设置图像生成参数
        $config['image_library']    = 'gd2';   //设置图像库
        $config['source_image']     = $img['source_image'];  //设置原始图像的名字/路径
        $config['create_thumb']     = FALSE;   //让图像处理函数产生一个预览图像
        $config['maintain_ratio']   = TRUE;  //指定是否在缩放或使用硬值的时候使图像保持原始的纵横比例
        //$config['quality']          = 200; 
        $img_info = array();
        $img_info = getimagesize($config['source_image']);//获取图片的尺寸

        if(is_array($img_info) && !empty($img_info))
        {
            $config['width']            = $img_info[0];
            $config['height']           = $img_info[1];      
        }

        $config['new_image']        = $img['new_image']; //新图片路径            

        $this->load->library('image_lib', $config);  //加载图片处理类 
        $this->image_lib->initialize($config);  //调用            

        if ( ! $this->image_lib->resize())
        {
            echo $this->image_lib->display_errors();               
        }        

        $this->image_lib->clear();  //清除图片处理参数


    }
}

?>
posted @ 2012-08-30 10:35  WhoAmMe  阅读(1623)  评论(0编辑  收藏  举报