Php 如何使用Imagemagick在CodeIgniter中进行重力放大?

Php 如何使用Imagemagick在CodeIgniter中进行重力放大?,php,codeigniter,imagemagick,Php,Codeigniter,Imagemagick,我试图以这样的方式裁剪图像(通过卷曲抓取),以便裁剪后的图像为171 x 118px。我没有强制将该图像的大小重新调整为171x118px,而是尝试让它以这样的方式工作,以便它捕获图像的任何171x118px区域并裁剪该区域。所以原始图像的输出是,它应该是输出而不是 以下是我目前的代码: $config['image_library'] = 'ImageMagick'; $config['library_path'] = '/usr/bin/

我试图以这样的方式裁剪图像(通过卷曲抓取),以便裁剪后的图像为171 x 118px。我没有强制将该图像的大小重新调整为171x118px,而是尝试让它以这样的方式工作,以便它捕获图像的任何171x118px区域并裁剪该区域。所以原始图像的输出是,它应该是输出而不是

以下是我目前的代码:

            $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();
$config['image_library']='ImageMagick';
$config['library_path']='/usr/bin/';
$config['create_thumb']=TRUE;
$config['mainter_ratio']=FALSE;
$this->load->library('image_lib',$config);
$dimensions[0]=数组('x'=>171,'y'=>118,'dir'=>small');
$dimensions[1]=数组('x'=>154,'y'=>105,'dir'=>medium');
$dimensions[2]=数组('x'=>312,'y'=>164,'dir'=>large');
对于($i=0;$iimage_lib->test();
$this->image\u lib->initialize($config);
$this->image_lib->resize();
$this->save缩略图($imageid,$ext,$dimensions[$i]['dir'],$i);
}
//常规站点图片
$config['width']=171;
$config['height']=218;
$this->load->library('image_lib',$config);
$this->image_lib->resize();

首先,您的“小”维度和“中”维度在维度数组中似乎是错误的

至于任务本身,您可以简单地使用codeigniter的“裁剪”功能为缩略图提供正确的尺寸。您可以使用以下几种方法:

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

首先,在维度数组中,您的“小”维度和“中”维度似乎是错误的

至于任务本身,您可以简单地使用codeigniter的“裁剪”功能为缩略图提供正确的尺寸。您可以使用以下几种方法:

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

还要注意,在第三种方法中,我在ImageMagick库中添加了与“重心”相同的效果。还要注意,在第三种方法中,我在ImageMagick库中添加了与“重心”相同的效果。