我目前在 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%”、“<40”等等),也许有一种方法可以用 imagemagick “dryrun”它 - 即让 imagemagick 返回结果大小使用特定命令的特定文件?
你会如何解决这个问题?