动态调整图像大小

时间:2013-03-10 00:53:28

标签: php codeigniter gd

我使用ci构建了一个库,其中上传的图像保持相同的大小,只要其在3000x5000像素范围内。在显示它们并且因为我没有裁剪缩略图时,我怎么能在需要时调整它们的大小所以说我想将它们的列表重新调整为150x150我将如何进行此操作?

我跟着指南 http://ellislab.com/codeigniter/user-guide/libraries/image_lib.html

问题是加载库时它要我指定每个图像的完整配置信息。 所以说我将变量加载到控制器中以显示在视图中,并且在加载时它将如下所示:

foreach($gallery as $img)
{
   echo "<div>";
   echo "<img src='" . $this->img_lib->resize($img->imagepath, 150, 150) . "'>";
   echo "</div>";

}

ps:图像在调整大小后会保存吗?因为我不想那样。

更好的解决方案:http://www.matmoo.com/digital-dribble/codeigniter/image_moo/

2 个答案:

答案 0 :(得分:0)

我知道如何在ci之外做到这一点。基本上img“src”需要等于一个php脚本或被htaccess拦截,然后将其重定向到php脚本。

您可以尝试这样的事情:

foreach($gallery as $img)
{
   echo "<div>";
   echo "<img src='/imageResize.php?path=" . $img->imagepath . "'>";
   echo "</div>";

}

档案:imageResize.php

$path = $_REQUEST['path'];
$this->img_lib->resize($path, 150, 150);

根据您网站的文件夹结构,最好只传递文件名而不是完整路径。更好的是使用.htaccess(我在我们的CMS中做)来截取图像并动态调整大小/裁剪。例如<img src="/path/to/image.jpg?w=150&h=150" />

这有助于提供一些方向吗?

在另一个问题上,除非您指定物理文件,否则不会在服务器上保存物理文件。

答案 1 :(得分:0)

@SaRiD的回答是正确的。但是,它不一定必须在CI之外。您可以将图像源指向控制器方法,该方法负责调整大小并为图像提供服务。

在此方法中,您还需要使用正确的headers来识别浏览器的图像资源。

您声明您不想保存缩略图。这显然取决于应用程序的需要。您可以将其设置为将以前裁剪并保存的缩略图提供给浏览器(如果存在)(来自先前的请求),而不是每次都创建和提供缩略图 - 它将为您节省一些CPU周期。