2011-05-02 119 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

相关问题