2011-05-02 115 views
1

我試圖通過這種方式裁剪圖像(通過捲曲抓取),以便裁剪後的圖像爲171 x 118像素。我試圖讓它以這樣的方式工作,以便抓取任何171x118px的圖像和作物區域,而不是強制將圖像重新設置爲171x118px。所以原始圖像是http://www.mirzar.com/ember/actual-image.png,它應該輸出http://www.mirzar.com/ember/desired-crop.png而不是http://www.mirzar.com/ember/cropped.png如何使用Imagemagick在CodeIgniter中進行重力縮放?

這裏是我到目前爲止的代碼:

  $config['image_library'] = 'ImageMagick'; 
      $config['library_path'] = '/usr/bin/'; 
      $config['create_thumb'] = TRUE; 
      $config['maintain_ratio'] = FALSE; 
      $this->load->library('image_lib', $config); 
      $dimensions[0] = array('x'=>171, 'y'=>118, 'dir'=>'small'); 
      $dimensions[1] = array('x'=>154, 'y'=>105, 'dir'=>'medium'); 
      $dimensions[2] = array('x'=>312, 'y'=>164, 'dir'=>'large'); 
      for ($i=0; $i<3;$i++){ 
       $filesize = filesize($filename); 
       $config['image_library'] = 'ImageMagick'; 
       $config['library_path'] = '/usr/bin/'; 
       $config['source_image'] = $filename; 
       $config['create_thumb'] = TRUE; 
       $config['maintain_ratio'] = FALSE; 
       $config['width'] = $dimensions[$i]['x']; 
       /* $config['height'] = $dimensions[$i]['y']; */ 
       $config['master_dim'] = 'width'; 

       $this->image_lib->test(); 
       $this->image_lib->initialize($config); 
       $this->image_lib->resize(); 
       $this->saveThumbnail($imageid, $ext, $dimensions[$i]['dir'], $i); 
      } 

      // regular site pic 
      $config['width']   = 171; 
      $config['height']   = 218; 
      $this->load->library('image_lib', $config); 
      $this->image_lib->resize(); 

回答

1

首先,它似乎你的「小」和「媒介」維度是南轅北轍的尺寸陣列英寸

至於任務本身,您可以簡單地使用codeigniter的'crop'功能爲縮略圖提供正確的尺寸。有幾種方法可以使用:

1)使用您描述的方法調整圖像大小,除了保持圖像比例並使用$config['master_dim'] = 'auto';。然後使用裁剪功能將這個新調整大小的圖像裁剪到您想要的確切尺寸。這種方法可以補償可能比縮略圖更小的圖像!

2)從一開始就裁剪圖像並完全忽略調整大小。

無論哪種方式,你會添加類似這樣:

$config['x_axis'] = 0; 
$config['y_axis'] = 0; 
$config['width'] = $dimensions[$i]['x']; 
$config['height'] = $dimensions[$i]['y']; 
$this->image_lib->initialize($config); 
$this->image_lib->crop(); 

這將創造更加簡潔縮略圖會制定出每幅圖像的「最適合」的第三種方法。類似以下內容:

$size = getimagesize($filename); 
$width_ratio = floor($size[0]/$dimensions[$i]['x']); 
$height_ratio = floor($size[1]/$dimensions[$i]['y']); 
$min_ratio - min($width_ratio, $height_ratio); 
$left = (($size[0] - ($dimensions[$i]['x'] * $min_ratio))/2); 
$right = (($size[1] - ($dimensions[$i]['y'] * $min_ratio))/2); 
$config['width'] = ($dimensions[$i]['x'] * $min_ratio); 
$config['height'] = ($dimensions[$i]['y'] * $min_ratio); 
$config['x_axis'] = $left; 
$config['y_axis'] = $right; 
$this->image_lib->initialize($config); 
$this->image_lib->crop(); 

然後將此新圖像調整爲所需的縮略圖大小。請注意,我沒有檢查小於0的比率,我會把它留給你。

問候, eyaka1

+0

還要注意的是,在第三個方法我已經添加爲ImageMagick庫「重力中心」的效果相同。 – eyaka1 2011-05-02 23:20:44

相關問題