2012-09-05 49 views
4

我是Codeigniter的新手。這是我想要做的:Codeigniter單幅圖像轉換成多幅調整

  1. 用戶上傳個人資料圖片。
  2. 我將原始圖像調整爲多種尺寸,例如400×300,200×200和32×32。

但是,當我上傳圖片的是,它的成功重新大小只有一個尺寸,400×300。

這裏是我的代碼:

$config['image_library'] = 'gd2'; 
$config['source_image'] = '/path/to/image/mypic.jpg'; 
$config['create_thumb'] = TRUE; 
$config['maintain_ratio'] = TRUE; 
$config['width']   = 400; 
$config['height']   = 300; 
$config['new_image'] = 400x300image; 
$this->load->library('image_lib', $config); 
$this->image_lib->resize(); 
$this->image_lib->clear() 

$config['image_library'] = 'gd2'; 
$config['source_image'] = '/path/to/image/mypic.jpg'; 
$config['create_thumb'] = TRUE; 
$config['maintain_ratio'] = TRUE; 
$config['width']   = 200; 
$config['height']   = 200; 
$config['new_image'] = 200x200image; 
$this->load->library('image_lib', $config); 
$this->image_lib->resize(); 
$this->image_lib->clear() 

$config['image_library'] = 'gd2'; 
$config['source_image'] = '/path/to/image/mypic.jpg'; 
$config['create_thumb'] = TRUE; 
$config['maintain_ratio'] = TRUE; 
$config['width']   = 32; 
$config['height']   = 32; 
$config['new_image'] = 32x32image; 
$this->load->library('image_lib', $config); 
$this->image_lib->resize(); 
$this->image_lib->clear(); 

我嘗試使用像$config2$config3不同配置的名字,但我我以前不得到的輸出。

請幫我解決這個問題。

+2

你確定你的'$ config ['new_image']'不是一個字符串嗎?你只是說'= 200x200image;'。 200x200image是預定義的常量嗎? – Prasanth

+0

@goldenparrot $ config ['new_image']是保存的文件名。它應該是一個字符串,在他的代碼中還有一些其他語法錯誤應該會引發錯誤。好眼睛。 – nageeb

回答

7

我建立了我的CI的應用程序的一個類似的功能。在我的情況下,我需要另一個函數中的配置文件,所以我構建了獨立的版本。

不要多次加載庫。一旦沒事。每次使用新配置重新初始化庫。

$this->load->library('image_lib'); 

/* First size */ 
$configSize1['image_library'] = 'gd2'; 
$configSize1['source_image'] = '/path/to/image/mypic.jpg'; 
$configSize1['create_thumb'] = TRUE; 
$configSize1['maintain_ratio'] = TRUE; 
$configSize1['width']   = 400; 
$configSize1['height']   = 300; 
$configSize1['new_image'] = '400x300image'; 

$this->image_lib->initialize($configSize1); 
$this->image_lib->resize(); 
$this->image_lib->clear(); 

/* Second size */  
$configSize2['image_library'] = 'gd2'; 
$configSize2['source_image'] = '/path/to/image/mypic.jpg'; 
$configSize2['create_thumb'] = TRUE; 
$configSize2['maintain_ratio'] = TRUE; 
$configSize2['width']   = 200; 
$configSize2['height']   = 200; 
$configSize2['new_image'] = '200x200image'; 

$this->image_lib->initialize($configSize2); 
$this->image_lib->resize(); 
$this->image_lib->clear(); 

依此類推。我想,爲了記憶,你可以像上面所建議的那樣,取消設置並重置配置文件,但是如果你打算像我一樣在單獨的控制器方法中使用圖像調整大小,我發現將它們分開保存是有幫助的。

+0

感謝您的回覆。我沒有實現你的概念,但我相信這會起作用。 –

+0

沒問題。作爲@goldenparrot提到,你應該檢查你的代碼是否有語法錯誤,這裏有一些。 – nageeb

+0

好的謝謝,你幫了我很多。謝謝:) –

3

問題是,CI將所有庫加載到靜態數組中後將其存儲,並且一旦加載它就不會再加載庫。

所以,你可以做的是,你可以再次使用新的配置初始化:

$this->image_lib->clear(); 

// make changes to the $conig here 

$this->image_lib->initialize($config); 

這應該工作。

Source.

+0

+1這是解決方案。我建議爲$ config var使用不同的名稱,或者爲每個新的resize重新初始化變量。 – Brendan