2010-07-24 138 views
3

我使用codeigniter来建立一个项目,现在我需要根据用户选择创建一个拇指。就像他会给我X1,Y1,X2,Y2,X3,Y3,X4,Y4我想根据4点裁剪图像。我检查了图像处理类。作物功能似乎很奇怪。请帮忙吗?如何在codeigniter中裁剪图像?

+0

这有帮助吗? http://stackoverflow.com/questions/2436378/codeigniter-crop-without-maintain-ration – 2010-07-24 12:38:46

+0

@Pekka ..如果我想裁剪像 P1 =(100,100) P2 =(100,200) P3 = (200,100) P4 =(200,200) – trrrrrrm 2010-07-24 12:49:14

+0

我不知道,我不熟悉CI的图像编辑功能。 – 2010-07-24 13:54:35

回答

4

我知道文档在图像库中的这个特殊功能上是稀疏的。裁切功能只会向轴提供。然后它将沿着这些轴切割并返回更靠近中心的图像部分。所以如果你将x轴设置为10,将y轴设置为10,它将删除图像的前10px和图像的左10px。同样,如果将x轴设置为图像宽度 - 10,它将从图像右侧裁剪10个像素。

你的四个位置告诉你真的是四个不同的轴。因此,你需要做两个操作。你只需要改变$ this-> image_lib-> crop()之间的轴。

如何找出这些轴取决于你如何获得这些数据。在一个数组中,作为单独的值等,所以我不会进入这个。

+0

我知道这已经很老了,但是这对我今天真的很有帮助!谢谢@Calle – 2012-12-03 14:58:48

13

您将需要设置x轴(左),宽度(右),y轴(顶部)和高度(底部)。您需要确保设置图像的宽度和高度。

 list($width, $height, $type, $attr) = getimagesize($img); 

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

     $config['image_library'] = 'gd2'; 
     $config['source_image'] = $img; 
     $config['x_axis'] = '10'; 
     $config['y_axis'] = '10'; 
     $config['maintain_ratio'] = FALSE; 
     $config['width'] = $width-10; 
     $config['height'] = $height-10; 

上面的代码会在左侧,右侧,顶部和底部裁剪图像10个像素。你可以随意将'10'的值改为任何你喜欢的值;)

+0

+1提供代码 – 2012-08-13 13:33:40

+0

这是一个非常好的例子。 – Andrew 2015-11-05 07:23:10

1

我没有得到任何与gd2库结果。 它总是调整图像大小,但更新的作物。

所以这里是imagemagick的解决方案,效果很好。

public function resize_prep($path, $file){ 
     $config['image_library'] = 'imagemagick'; 
     $config['library_path'] = '/usr/bin'; 
     $config['source_image'] = $path; 
     $config['create_thumb'] = TRUE; 
     $config['maintain_ratio'] = FALSE; 
     $config['x_axis'] = 300; 
     $config['y_axis'] = 300; 
     //$config['width'] = 650; 
     //$config['height'] = 353;  
     $config['new_image'] = './uploads/'.$file; 

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

     $this->image_lib->initialize($config); 
     if (!$this->image_lib->crop()){ 
      echo $this->image_lib->display_errors(); 
     } 
    }