2013-10-24 146 views
0

我試圖使用Codeigniter的圖像操作類來調整一些圖像的大小。我想將寬度設置爲150px,並根據新寬度改變高度。即如果我有一張300x200的圖片,它會變成150x100;如果我有300x500的圖片,它會變成150x250。Codeigniter調整大小的圖像與固定寬度

利用這種配置,肖像圖片widht小於150像素:

$config['maintain_ratio'] = TRUE; 
$config['width'] = 150; 
$config['height'] = 150; 

如果我不設置$配置[「高度」]如我所願調整大小類不起作用。 有沒有辦法設置固定寬度並相應更改高度?

回答

3

萬一別人奇觀。這實際上很簡單,一旦你理解CI調整後的邏輯。我有一個形象600x1125,我需要做100x'whatever_the _right_ratio_is」如果我們繼續這樣的代碼:

//$config['maintain_ratio'] = TRUE; // By default this value is TRUE, so unless it is set to FALSE else where, it's not needed 
$config['width'] = 100; 
$config['height'] = 100; 

CI去與高度,這將使它54x100,因爲它看到100作爲。 。最大限度因爲我們有maintain_ratio = TRUE,這是怎麼了調整,但如果我做這樣的:。

$config['width'] = 100; 
$config['height'] = 400; 

現在,CI將與寬度去,因爲最大寬度爲100,這是隻有這樣才能保持這個比例,所以它就是100x188

0

需要使能保持高寬比

使用此配置,並檢查

config['image_library'] = 'gd2'; 
$config['source_image'] = '/path/to/image/mypic.jpg'; 
$config['create_thumb'] = TRUE; 
$config['maintain_ratio'] = TRUE; 
$config['width'] = 75; 
$config['height'] = 50; 

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

$this->image_lib->resize(); 

上面的代碼告訴image_resize函數來尋找被叫mypic.jpg位於所述source_image文件夾的圖像,然後使用GD2 image_library創建一個75×50像素的縮略圖。由於啓用了maintain_ratio選項,拇指將盡可能接近目標寬度和高度,同時保留原始高寬比。縮略圖將被稱爲mypic_thumb.jpg

0

我認爲這段代碼會幫助你,它對我來說工作得很好。

$config['image_library'] = 'gd2'; 
    $config['source_image'] = 'imagepath'; 
    $config['create_thumb'] = TRUE; 
    $config['maintain_ratio'] = TRUE; 
    $config['width']  = 75; 
    $config['height'] = 50; 
    $config['new_image'] = 'path to save resize image'; 

    $this->load->library('image_lib', $config); 
    $this->image_lib->initialize($config); 

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

在要調整大小
create_thumb =它將使用imagename_thumb
maintain_ratio新圖像=調整時保持原有的縱橫比,或者使用硬哪個圖像此代碼

source_image =圖片路徑值。
new_image =保存位置調整圖像 高度和寬度來調整圖像

0

你可以使用$config['master_dim'] = 'width'來確定哪個軸應該用作硬值。

https://ellislab.com/codeigniter/user-guide/libraries/image_lib.html

而且我不知道是否有另一種方式,因爲爲了保持無線電,CI需要確定哪個軸是極限。如果我是開發人員,我會計算實際寬度與期望寬度的比率以及實際高度與期望高度的比率,然後較大的比例表示限制。所以有限的軸尺寸只是所需的尺寸,並且通過這個比率除另一個軸的實際尺寸將是另一個軸的結果尺寸。在這種情況下,如果我希望在保持比例的情況下具有固定寬度,那麼我只需將高度設置爲非常大的數值,以便調整器實際上會忽略它,因爲實際高度與期望高度的比率遠小於比率實際寬度和所需寬度。那麼結果將是寬度固定的。

但是,當我將高度設置爲PHP_INT_MAX時,它會拋出一個錯誤。我看着源代碼,並發現了CI做了這樣的計算:

$new_width = ceil($this->orig_width*$this->height/$this->orig_height); 
$new_height = ceil($this->width*$this->orig_height/$this->orig_width); 

$ratio = (($this->orig_height/$this->orig_width) - ($this->height/$this->width)); 

所以,如果我設置高度PHP_INT_MAX,它會做乘法時超出整數限制。

相關問題