0

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

使用此配置,纵向图像宽度小于 150 像素:

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

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

4

4 回答 4

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。

于 2013-11-20T00:04:45.503 回答
1

您可以使用$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,则在进行乘法运算时它将超过整数限制。

于 2014-09-09T02:27:28.373 回答
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

于 2013-10-25T05:02:19.597 回答
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 = 保存调整图像大小的位置 调整图像大小的高度和宽度

于 2013-10-26T06:46:27.670 回答