8

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

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

我目前是如何做的 - 后一个对我来说听起来更好,因为它不会在磁盘上占用太多空间,但它必须一次又一次地调整图像大小。你觉得哪一个更好?

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

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

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

4

5 回答 5

6

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

存储通常很便宜,所以我可能不会考虑那种额外的复杂性。

于 2013-02-07T15:54:42.580 回答
2

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

于 2013-02-07T15:56:43.560 回答
1

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

于 2013-02-07T15:57:54.547 回答
1

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

这可以追溯到“做谷歌所做的事情”但使用 CMS 的古老说法。

于 2013-02-07T15:57:58.867 回答
1

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

对于大多数应用程序来说,磁盘空间不是问题——如果存储缩略图是一个问题,那么存储原件肯定是一个大问题——一张像样的数码相机照片将运行到许多兆字节,而缩略图不应超过 50K。

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

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

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

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

于 2013-02-07T16:43:34.557 回答