2013-04-29 158 views
1

我有一个CI图像上传表单,我想确保我上传的图像适合给定的矩形。如果它们太大 - 我想缩小它们。如果它们适合那个矩形 - 我不需要调整大小。如何在最大宽度和最大高度范围内调整图像的大小?

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

+0

问题尚不清楚。想缩小尺寸不要调整大小? – Nish 2013-04-29 12:36:35

+0

正如我在我的问题中所说的那样,我只想在他们太大时缩小它们。如果它们不比我的最大宽度宽,也不比我的最大高度高,我不需要调整它们的大小。 – einav 2013-04-29 12:48:58

回答

4

嗯,这是很容易,从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()) 
} 
+0

我不知道codeigniter在调整大小之前是否不会自动比较图像的宽度/高度和最大宽度/高度... – dsdsdsdsd 2016-03-25 19:40:29

0

使用Image Manipulation Class形式CI

+0

但是,如何设置该类的最大高度和最大宽度?据我所知,它只支持* set * width和* set * height。 – einav 2013-04-29 12:19:49

+0

我相信你可以_force_图像被调整到某些尺寸,但默认的行为是让图像**符合**在指定的尺寸(s)。正是你想要做的 - 哦,等等,你已经发现了你自己。干得好,对于迟到的回复感到抱歉。 – 2013-05-07 09:20:28

1

也许有更好的方式来处理,这是通过CSS(与CI的图像处理库进行调整一起):

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

只是为了确保我能理解你 - 你的意思是我应该在上传图片后处理,当在我的网站上显示上传的图片时? – einav 2013-04-29 12:46:34

+0

你会使用图像处理类来设置上传时的宽度/高度(这实际上是你想要上传图像的最大宽度/高度); CSS会为您提供另一个工具(上传后),以强制您的图像具有给定的最大宽度/高度。或者,您可以在上传时检查图像的宽度/高度,并使用“if/else”检查来确定图像是否应该调整大小。前一种方法(使用CSS)为您提供了更大的灵活性,如果您的设计发生变化并且图像需要显示更大或更小。 – Mudshark 2013-04-29 12:53:33

+0

谢谢。我会考虑CSS的想法。现在可能已经足够了。但如果没有 - 如何在上传时检查图像的宽度/高度? – einav 2013-04-29 13:00:10

2

你需要计算的高度和宽度,你想调整大小的图像。例如:

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

采取由西尔维乌摹提供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(); 
+0

谢谢您的帮助。原来计算是不需要的,因为CI会自动执行,如果你设置'$ config ['maintain_ratio'] = TRUE'。 – einav 2013-04-30 07:08:40

相关问题