2012-10-25 16 views
4

我在尝试调整图像大小然后创建拇指时遇到了问题。CodeIgniter:图像处理类不能工作两次

这两个函数都是独立工作的,但是当试图对它们进行调用时,只有第一个调用起作用。没有拇指被创建,为什么?

这里是我的控制器:

if($this->upload->do_upload()){ 

       // Si oui, tout va bien 

       //Update DB 
       $pictureData = $this->upload->data(); 
       if($pictureData['file_name']!=''){ 
        //On resize l'immage 
         //On charge la librarie 
         $this->load->library('thumbs'); 

         $this->thumbs->resize($pictureData['full_path'], 300, 600); 

        $News['image']=$pictureData['file_name']; 

        //On crée un Thumbnail: 
         // on envoi le full path 
         if($this->thumbs->create($pictureData['full_path'])) 

         // on stock le path recu 
        $News['thumb'] = $pictureData['raw_name'].'_thumb'.$pictureData['file_ext']; 
       } 
      } 

这里是我已经为这两个函数创建库:

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

class Thumbs 
{ 

    function __construct() 
    { 
     $CI =& get_instance(); 
     $this->load->library('image_lib'); 
    } 

    public function create($picPath) { 

     $CI =& get_instance(); 

     $config['image_library'] = 'gd2'; 
     $config['source_image'] = $picPath; 
     $config['maintain_ratio'] = TRUE; 
     $config['create_thumb'] = TRUE; 
     $config['width']  = 100; 
     $config['height'] = 100; 

     $CI->image_lib->clear(); 
     $CI->image_lib->initialize($config); 

     if(!$CI->image_lib->resize()){ 
      $CI->session->set_flashdata('flashError', $CI->image_lib->display_errors()); 
      return False; 
     } 
     $CI->image_lib->clear(); 
     Return True; 

    } 

    public function resize($picPath, $x, $y) { 

     $CI =& get_instance(); 

     $config1['image_library'] = 'gd2'; 
     $config1['source_image'] = $picPath; 
     $config1['maintain_ratio'] = TRUE; 

     if($x!=0) 
      $config1['width'] = $x; 

     if($y!=0) 
      $config1['height'] = $y; 

     $CI->image_lib->clear(); 
     $CI->image_lib->initialize($config1); 

     if(!$CI->image_lib->resize()){ 
      $CI->session->set_flashdata('flashError', $CI->image_lib->display_errors()); 
      return False; 
     } 
     $CI->image_lib->clear(); 
     Return True; 
    } 
} 

所以,如果我叫只有一个,它做工精细,羯羊它是创建或调整大小功能。否则,如果我尝试调用它们,只有第一个被调用的函数有效。

编辑:感谢fccotech,我做到了。这里是他想出了解决方案:

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

class Thumbs 
{ 

    function __construct() 
    { 
     $this->CI =& get_instance(); 
     $this->CI->load->library('image_lib'); 
    } 

    public function create($picPath, $picName) { 

     $config =array(); 

     $config['image_library'] = 'gd2'; 
     $config['source_image'] = $picPath; 
     $config['maintain_ratio'] = TRUE; 
     $config['create_thumb'] = TRUE; 
     $config['width']  = 100; 
     $config['height'] = 100; 
     $config['new_image'] = $picName; 

     // $CI->image_lib->clear(); 
     $this->CI->image_lib->initialize($config); 

     if(!$this->CI->image_lib->resize()){ 
      $this->CI->session->set_flashdata('flashError', $this->CI->image_lib->display_errors()); 
      return False; 
     } 
     $this->CI->image_lib->clear(); 
     Return True; 

    } 

    public function resize($picPath, $x, $y) { 

     $config1 = Array(); 

     $config1['image_library'] = 'gd2'; 
     $config1['source_image'] = $picPath; 
     $config1['maintain_ratio'] = TRUE; 

     if($x!=0) 
      $config1['width'] = $x; 

     if($y!=0) 
      $config1['height'] = $y; 

     // $CI->image_lib->clear(); 
     $this->CI->image_lib->initialize($config1); 

     if(!$this->CI->image_lib->resize()){ 
      $this->CI->session->set_flashdata('flashError', $this->CI->image_lib->display_errors()); 
      $this->CI->image_lib->clear(); 
      return False; 
     } 
     $this->CI->image_lib->clear(); 
     Return True; 
    } 
} 

回答

7

调整大小后添加

$this->image_lib->clear(); 

所以也很清楚,你做一个新的$ CI-> image_lib->初始化($配置)之前;

+0

谢谢,但是在做完你所说的内容之后它仍然不起作用 –

+0

你现在可以发布你的代码吗? – fccotech

+0

完成后,我现在更新了 –