即时调整图像大小
Posted
技术标签:
【中文标题】即时调整图像大小【英文标题】:resize image on the fly 【发布时间】:2013-03-10 00:53:28 【问题描述】:我使用 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/
【问题讨论】:
【参考方案1】:我知道如何在 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" />
这是否有助于提供一些方向?
关于您的另一个问题,除非您指定,否则物理文件不会保存在服务器上。
【讨论】:
哇,你的方法我什至没想到。这是一个更好的解决方案,直到我弄清楚如何以 ci 方式做到这一点。谢谢!【参考方案2】:@SaRiD 的答案是正确的。但是,它不一定必须在 CI 之外。您可以将图像源指向负责调整大小并提供图像的控制器方法。
您还需要在此方法中使用正确的headers 向浏览器识别图像资源。
您声明不想保存缩略图。这显然取决于应用程序的需要。您可以将其设置为向浏览器提供先前裁剪和保存的缩略图(如果存在)(来自先前的请求),而不是每次都创建和提供缩略图 - 这将为您节省一些 CPU 周期。
【讨论】:
以上是关于即时调整图像大小的主要内容,如果未能解决你的问题,请参考以下文章