2012-10-25 14 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

完成後,我現在更新了 –