我正在尝试使用Codeigniter的图像处理类来调整一些图像的大小。我想将宽度设置为 150px,并让高度根据新宽度变化。即,如果我有一个 300x200 的图像,它将变为 150x100;如果我有一个 300x500 的图像,它将变为 150x250。
使用此配置,纵向图像 widht 小于 150px:
$config['maintain_ratio'] = TRUE;
$config['width'] = 150;
$config['height'] = 150;
如果我不设置$config['高度'],调整大小类将无法按我希望的那样工作。有没有办法设置固定宽度并相应地更改高度?
其他人想知道。一旦您了解了 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。
$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,则在进行乘法时它将超过整数限制。
您需要启用保持纵横比
使用此配置并检查
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
这段代码会对你有所帮助,它对我来说工作正常。
$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 = 保存调整大小图像的位置用于调整图像大小的高度和宽度