将图像标记与图像大小调整分开

时间:2012-12-12 10:58:10

标签: php image-processing imagemagick

我目前在PHP中有一个名为img()的函数,它至少需要两个参数:

print img("foo.jpg", 100);

这将返回类似的内容:

<img src='/cache/foo_XXXXX.jpg' width='100' height='76' />

因此,该函数接受参数,调整原始文件的大小并将其保存为服务器上的缓存文件并返回图像标记。显然,如果缓存版本已经存在,它只返回它并保存下次处理。

现在,这完全适用于100个中的99个案例,但是对于某些站点,有些页面的图像很重,并且由于图像的缓存版本在X天后过期,因此img()函数需要为小缩略图重新创建50多个高分辨率图像,加载这样的页面需要几秒钟,这是不可接受的。

所以我的想法是把它分开。所以这样做:

print img("foo.jpg", 100);

会返回这个:

<img src='img.php?ARGUMENTS' width='?' height='?' />

这意味着img()函数实际上根本不处理文件,而是输出HTML,告诉浏览器从PHP脚本而不是服务器上的静态图像文件中获取图像。

现在,“ARGUMENT”部分当然会包含img.php处理文件所需的所有信息,就像img()处理它一样 - 也许是所有参数的序列化字符串版本功能?

但问题是图片标签的宽度/高度值!由于处理移动到当前脚本的范围之外,因此不知道生成的图像会有多大,对吧?我显然不能等待img.php完成并返回它。我使用imagemagick进行处理(所以第二个参数可以是100,“50%”,“&lt; 40”等等)也许有一种方法可以用imagemagick“干燥”它 - 即让imagemagick返回结果大小使用特定命令的特定文件?

你会如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

你有数据库中某处的所有图像列表,对吧?您可以添加宽度和高度的字段,并在生成HTML时计算缩放的宽度和高度。您也可以将缩略图的宽度和高度添加到数据库中。