我应该在每次请求时动态生成每个缩略图,还是将它们存储在图像上传中?

时间:2013-02-07 15:51:41

标签: php image web-applications upload thumbnails

问题 - 我想在我的网站上设置图片上传功能。但我想展示原始图像和图像的小缩略图。

选择 - 哪种方式更好 - 在上传图片时在目录中创建单独的图像(缩略图),或者通过以固定比例缩小其高度和宽度来显示较小的版本请求图像的时间?

我当前是怎么做的 - 后者对我来说听起来更好,因为它不会在磁盘上花费太多,但它必须一次又一次地调整图像大小。你认为哪一个更好?

这是Web应用程序的一般问题,没有具体的语言。

知道facebook或google是如何做到的?

问题 - 我的问题是如何生成缩略图并在网站上显示 - 通过创建较小尺寸的原始图像副本或每次请求时动态生成缩略图。< / p>

5 个答案:

答案 0 :(得分:6)

在上传时创建缩略图几乎总是更好的选择。如果存储是一个问题,您可以根据请求转换它们,然后将结果缓存到内存存储中。如果在缓存过期之前再次请求,则不需要转换。

存储通常非常便宜,所以我可能不会那么复杂。

答案 1 :(得分:2)

只需创建缩略图版本并保存到磁盘即可。硬盘空间非常便宜。一个TB的70英镑。

答案 2 :(得分:1)

创建缩略图是一个更好的选择,它不会花费太多磁盘空间。打开页面时,您的客户也会加载较小的尺寸。根据请求转换图片会使活动花费更多时间加载您的页面;)

答案 3 :(得分:1)

如果您查看具有此内置功能的大多数CMS,他们几乎总是在上传时创建图像的缩略图并将其存储在服务器上。

这可以追溯到古老的说法“做谷歌做什么”,但使用CMS。

答案 4 :(得分:1)

“更好”取决于您设定的标准。

对于大多数应用程序,磁盘空间不是问题 - 如果存储缩略图是一个问题,存储原件必须是一个巨大的问题 - 一个体面的数码相机照片将运行到几兆字节,而缩略图不应超过50K 。

带宽和性能(客户认为)通常是更大的问题。如果您有很多人浏览图像缩略图库,那么提供50Kb缩略图将比服务多兆字节高分辨率图像快得多(并且带宽更便宜)。

此外,通过在<img src="images/thumbnail/foobar.jpg">等URL上提供缩略图并设置适当的缓存标头,您应该获得大量的下游缓存 - 如果您将图像作为<img src="thumbnail.php?image=image/foobar.jpg>提供,则不太可能相当保守地对待查询字符串。

我曾经在管理过数十万件产品图片的网站上工作;我们设置了ImageMagick来自动创建缩略图。根据您的设置,在首次请求缩略图时,而不是在上传文件时执行此操作可能是有意义的,因为转换可能相当耗费资源,并且在上传时执行此操作所需的时间比我们想要等待的时间长。现代硬件可能使这成为一个问题。

还有一个关于保持缩略图与原件同步的问题 - 如果用户上传新图像,则必须确保更新缩略图;如果原件被删除,您还必须删除缩略图。