【问题标题】:how to resize an image to a fit within max width and max height?如何调整图像大小以适应最大宽度和最大高度?
【发布时间】:2013-04-29 12:13:49
【问题描述】:

我有一个 CI 图片上传表单,我想确保我上传的图片适合给定的矩形。如果它们太大 - 我想缩小它们的尺寸。如果它们适合该矩形 - 我不需要调整大小。

我知道 CI 支持最大高度和最大宽度(作为上传图像大小的限制),并且它支持调整大小,但我找不到如何将图像调整为设置的最大高度和最大宽度(同时保持比例)。

【问题讨论】:

  • 问题不清楚。想要缩小而不是调整大小?
  • 正如我在问题中所说,只有当它们太大时,我才想缩小它们的尺寸。如果它们不大于我的最大宽度且不高于我的最大高度,我不需要调整它们的大小。

标签: codeigniter image-processing


【解决方案1】:

嗯,正如 CI 所预期的那样,这很容易(-:

使用$this->image_lib->resize() 时,您可以设置所需的宽度和高度。如果您还将maintain_ratio 设置为true,则新图像的大小将调整为最接近您设置的宽度和高度的值,同时保留原始纵横比。

这是我上传图片后使用的代码:

$file_data = $this->upload->data();

$max_height = 115;
$max_width = 225;
if ($file_data['image_width']>$max_width || $file_data['image_height']>$max_height)
{
    $configResize = array(
                        'source_image' => $file_data['full_path'],
                        'width' => $max_width,
                        'height' => $max_height,
                        'maintain_ratio' => TRUE
                );

      $this->load->library('image_lib',$configResize);
      $this->image_lib->resize())  
 }

【讨论】:

  • 我想知道 codeigniter 在调整大小之前是否不会自动将图像宽度/高度与最大宽度/高度进行比较...
【解决方案2】:

您需要计算调整后图像的高度和宽度。例如:

  1. 假设您的输入图像为 1200x1000,并且您希望调整后的图像为 300x200。
  2. 求大小比 1200/1000=1.2 和 300/200=1.5。
  3. 如果原始比例大于您想要匹配宽度的目标调整大小比例,否则您想要计算高度。在这种情况下,我们要匹配高度。
  4. 查找比例因子以将图像更改为目标大小。比例因子为 200/1000=0.2。
  5. 使用比例因子找到新的尺寸 1200x1000 缩放 0.2(1200*0.2 和 1000*0.2)= 240x200。
  6. 将图像大小调整为 240x200,因为它最适合 300x200 框。

取自 Silviu G http://ellislab.com/codeigniter/user-guide/libraries/image_lib.html提供的网站

    $this->load->library('image_lib');
    $config['image_library'] = 'gd2';
    $config['source_image'] = 'originalImage.jpg';
    $config['create_thumb'] = TRUE;
    $config['width'] = 240;
    $config['height'] = 200;
    $this->load->library('image_lib', $config); 
    $this->image_lib->resize();

【讨论】:

  • 感谢您的帮助。结果证明不需要计算,因为 CI 会自动执行,如果您设置 $config['maintain_ratio'] =TRUE
【解决方案3】:

也许更好的方法是通过 CSS(结合 CI 图像处理库来调整大小):

    .media img{
        max-width:100px;
        max-height:100px;
    }

【讨论】:

  • 只是为了确保我理解你 - 你的意思是我应该在我上传图片后,在我的网站上显示上传的图片时处理这个问题?
  • 您将使用图像处理类在上传时设置其宽度/高度(这实际上是您希望上传图像的最大宽度/高度); CSS 为您提供了另一个工具(上传后),强制您的图像具有给定的最大宽度/高度。或者,您可以在上传时检查图像的宽度/高度,并使用if/elsecheck 来确定是否应该调整图像大小。如果您的设计发生变化并且图像需要显示得更大或更小,前一种方法(使用 CSS)为您提供了更大的灵活性。
  • 谢谢。我会考虑 CSS 的想法。现在可能就足够了。但如果不是 - 我如何在上传时检查图像宽度/高度?
  • $this->upload->data()为您提供有关上传图像的一系列信息,包括宽度/高度:ellislab.com/codeigniter/user-guide/libraries/…
【解决方案4】:

使用Image Manipulation Class 表单 CI

【讨论】:

  • 但是如何设置该类的最大高度和最大宽度?据我了解,它只支持 set 宽度和 set 高度。
  • 我相信您可以强制将图像调整为特定尺寸,但默认行为是让图像适合在指定尺寸内(s)。正是你想做的——哦,等等,你已经在自己身上找到了。干得好,很抱歉回复晚了。
  • 链接失效了... 404
  • 我在大约九年前发布了这个答案。我已经更新了指向 current 文档的链接。至于怎么用,里面有例子。