2013-04-29 116 views
1

我有一個CI圖像上傳表單,我想確保我上傳的圖像適合給定的矩形。如果它們太大 - 我想縮小它們。如果它們適合那個矩形 - 我不需要調整大小。如何在最大寬度和最大高度範圍內調整圖像的大小?

我知道CI支持最大高度和最大寬度(作爲限制上傳的圖像可以有多大),它支持調整大小,但我找不到如何調整圖像的大小,以設置max-高度和最大寬度(同時保持比例)。

+0

問題尚不清楚。想縮小尺寸不要調整大小? – Nish 2013-04-29 12:36:35

+0

正如我在我的問題中所說的那樣,我只想在他們太大時縮小它們。如果它們不比我的最大寬度寬,也不比我的最大高度高,我不需要調整它們的大小。 – einav 2013-04-29 12:48:58

回答

4

嗯,這是很容易,從CI(預期 - :

使用$this->image_lib->resize(),用戶設定所需的寬度&如果您還將maintain_ratio設置爲true,則新圖像將調整爲您的設置寬度的最接近可能的值,同時保持原始高寬比

所以這是我使用的代碼,上傳圖片後:

$file_data = $this->upload->data(); 

$max_height = 115; 
$max_width = 225; 
if ($file_data['image_width']>$max_width || $file_data['image_height']>$max_height) 
{ 
    $configResize = array(
         'source_image' => $file_data['full_path'], 
         'width' => $max_width, 
         'height' => $max_height, 
         'maintain_ratio' => TRUE 
       ); 

     $this->load->library('image_lib',$configResize); 
     $this->image_lib->resize()) 
} 
+0

我不知道codeigniter在調整大小之前是否不會自動比較圖像的寬度/高度和最大寬度/高度... – dsdsdsdsd 2016-03-25 19:40:29

0

使用Image Manipulation Class形式CI

+0

但是,如何設置該類的最大高度和最大寬度?據我所知,它只支持* set * width和* set * height。 – einav 2013-04-29 12:19:49

+0

我相信你可以_force_圖像被調整到某些尺寸,但默認的行爲是讓圖像**符合**在指定的尺寸(s)。正是你想要做的 - 哦,等等,你已經發現了你自己。幹得好,對於遲到的回覆感到抱歉。 – 2013-05-07 09:20:28

1

也許有更好的方式來處理,這是通過CSS(與CI的圖像處理庫進行調整一起):

.media img{ 
     max-width:100px; 
     max-height:100px; 
    } 
+0

只是爲了確保我能理解你 - 你的意思是我應該在上傳圖片後處理,當在我的網站上顯示上傳的圖片時? – einav 2013-04-29 12:46:34

+0

你會使用圖像處理類來設置上傳時的寬度/高度(這實際上是你想要上傳圖像的最大寬度/高度); CSS會爲您提供另一個工具(上傳後),以強制您的圖像具有給定的最大寬度/高度。或者,您可以在上傳時檢查圖像的寬度/高度,並使用「if/else」檢查來確定圖像是否應該調整大小。前一種方法(使用CSS)爲您提供了更大的靈活性,如果您的設計發生變化並且圖像需要顯示更大或更小。 – Mudshark 2013-04-29 12:53:33

+0

謝謝。我會考慮CSS的想法。現在可能已經足夠了。但如果沒有 - 如何在上傳時檢查圖像的寬度/高度? – einav 2013-04-29 13:00:10

2

你需要計算的高度和寬度,你想調整大小的圖像。例如:

  1. 假設您的輸入圖像是1200x1000,並且您希望重新調整大小的圖像爲300x200。
  2. 找到大小比率1200/1000 = 1.2和300/200 = 1.5。
  3. 如果原始比例大於要匹配寬度的目標大小調整大小比例,否則您想計算高度。在這種情況下,我們想匹配高度。
  4. 找到比例因子將圖像更改爲目標大小。比例因子是200/1000 = 0.2。
  5. 使用縮放因子查找縮放0.2(1200 * 0.2和1000 * 0.2)= 240x200的新大小1200x1000。
  6. 將圖像調整爲240x200,因爲它最適合300x200盒子。從網站

採取由西爾維烏摹提供http://ellislab.com/codeigniter/user-guide/libraries/image_lib.html

$this->load->library('image_lib'); 
    $config['image_library'] = 'gd2'; 
    $config['source_image'] = 'originalImage.jpg'; 
    $config['create_thumb'] = TRUE; 
    $config['width'] = 240; 
    $config['height'] = 200; 
    $this->load->library('image_lib', $config); 
    $this->image_lib->resize(); 
+0

謝謝您的幫助。原來計算是不需要的,因爲CI會自動執行,如果你設置'$ config ['maintain_ratio'] = TRUE'。 – einav 2013-04-30 07:08:40

相關問題