如何使用Imagemagick对CodeIgniter进行重力缩放?

时间:2011-05-02 19:52:33

标签: php codeigniter imagemagick

我正在尝试以这种方式裁剪图像(通过Curl抓取),以使裁剪的图像为171 x 118px。我没有强制将图像重新调整为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

到目前为止,这是我的代码:

            $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 个答案:

答案 0 :(得分: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