Codeigniter使用固定宽度调整图像大小

时间:2013-10-24 15:25:55

标签: php codeigniter image-processing

我试图使用Codeigniter的图像处理类来调整某些图像的大小。我想将宽度设置为150px,并根据新的宽度调整高度。即如果我有一个300x200的图像,它将变为150x100;如果我有300x500的图像,它将变为150x250。

使用此配置,肖像图像小于150px:

$config['maintain_ratio'] = TRUE;
$config['width'] = 150;
$config['height'] = 150;

如果我没有设置$ config [' height'],调整大小的课程并不像我希望的那样工作。 有没有办法设置固定宽度并相应地改变高度?

4 个答案:

答案 0 :(得分:3)

以防万一其他人想知道。一旦你理解了CI调整背后的逻辑,它实际上非常简单。我有一个图像600x1125,我需要制作100x'whatever_the _right_ratio_is“。如果我们保持这样的代码:

 //$config['maintain_ratio'] = TRUE; // By default this value is TRUE, so unless it is set to FALSE else where, it's not needed
 $config['width'] = 100;
 $config['height'] = 100;
CI与高度一致。所以它会使它达到54x100,因为它将100视为最大限制。因为我们有maintain_ratio = TRUE,所以这就是它调整它的方式。但如果我这样做:

 $config['width'] = 100;
 $config['height'] = 400;

现在,CI将使用宽度,因为最大宽度为100,这是保持比率的唯一方法。所以它使它成为100x188。

答案 1 :(得分:0)

你需要启用维持宽高比

使用此配置并检查

 config['image_library'] = 'gd2';
 $config['source_image'] = '/path/to/image/mypic.jpg';
 $config['create_thumb'] = TRUE;
 $config['maintain_ratio'] = TRUE;
 $config['width'] = 75;
 $config['height'] = 50;

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

 $this->image_lib->resize(); 

上面的代码告诉image_resize函数查找位于source_image文件夹中的名为mypic.jpg的图像,然后使用GD2 image_library创建一个75 X 50像素的缩略图。由于启用了maintain_ratio选项,因此拇指将尽可能接近目标宽度和高度,同时保留原始高宽比。缩略图将被称为mypic_thumb.jpg

答案 2 :(得分:0)

我认为这段代码可以帮助你,它对我来说很好。

    $config['image_library'] = 'gd2';
    $config['source_image'] = 'imagepath';
    $config['create_thumb'] = TRUE;
    $config['maintain_ratio'] = TRUE;
    $config['width']     = 75;
    $config['height']   = 50;
    $config['new_image'] = 'path to save resize image';

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

    if(!$this->image_lib->resize())
    {
        echo $this->image_lib->display_errors(); 
    }else echo "resize successfully";

在此代码中

source_image =要调整大小的图像的图像路径
create_thumb =它将使用imagename_thumb生成新图像 maintain_ratio =调整大小或使用硬值时保持原始宽高比 new_image =保存调整大小图像的位置 高度和宽度调整图像大小

答案 3 :(得分:0)

您可以使用$config['master_dim'] = 'width'来确定哪个轴应该用作硬值。

请参阅https://ellislab.com/codeigniter/user-guide/libraries/image_lib.html

我想知道是否还有另一种方式,因为为了保持无线电,CI需要确定哪个轴是限制。如果我是开发人员,我会计算实际宽度与所需宽度的比率以及实际高度与所需高度的比率,然后较大的比率表示限制。因此,有限的轴尺寸只是所需的尺寸,并且将该另一个轴的实际尺寸除以该另一个轴的结果尺寸。在这种情况下,如果我想在保持比率时有一个固定的宽度,我只需将高度设置为一个非常大的数字,这样调整器实际上会忽略它,因为实际高度与所需高度的比率远小于比率实际宽度和所需宽度。然后结果将是宽度固定的。

但是当我将高度设置为PHP_INT_MAX时,它会抛出错误。我查看了源代码,发现CI做了这样的计算:

$new_width = ceil($this->orig_width*$this->height/$this->orig_height);
$new_height = ceil($this->width*$this->orig_height/$this->orig_width);

$ratio = (($this->orig_height/$this->orig_width) - ($this->height/$this->width));

因此,如果我将高度设置为PHP_INT_MAX,那么在进行乘法时它会超过整数限制。