4

我正在创建一个社交网络,用户可以在其中上传他们的个人资料图片。

此图像将在其个人资料页面中使用,尺寸为 150 / 150 像素。

在主页,即用户活动提要中,我需要相同的图像在 75 / 75 像素中。

这样做的最佳做法是什么

  1. 即时调整图像大小(timthumb)。
  2. 在服务器中调整大小并保存图像。
4

4 回答 4

3

上传照片时,创建所需的缩略图集并保存为 [image_name] thumb [size_name].jpg 左右:

uploaded: file.jpg
medium: file_thumb_150x150.jpg
small: file_thumb_75x75.jpg

命名约定由您决定,但您可以快速轻松地访问所需的数据。无需使用服务器即时生成或在浏览器中扩展。

于 2011-05-16T04:50:31.837 回答
2

我一直在研究这个问题一段时间,并遇到了 3 种主要方法:

  1. 在上传时生成缩略图图像作为后台进程。
  2. 通过主应用程序按需生成图像
  3. 使用 URL 作为 API 按需生成图像

每种方法都有其优点和缺点。

  1. 这种方法是最严格的,您必须预先了解缩略图的所有用途和大小,以便您可以在上传后立即生成它们。主要优点是可以使用像 nginx 这样的服务器有效地提供图像,并且就像任何其他静态资源一样。
  2. Django 有一个名为 sorl-thumbnail 的库,它提供了一个模板标签,用于在需要时生成各种缩略图。它使用快速键/值存储来跟踪已生成的缩略图,并在检测到源图像已更改时自动使陈旧的生成图像无效。然后模板标签返回生成图像的 URL,可以直接从 nginx 提供,而无需通过脚本层。比 1 更灵活,但您不能(例如)使用 JavaScript 生成图像 URL 并期望它存在,它必须由网站的后端代码或模板完成。
  3. 完全动态和灵活,你可以通过调整 URL 来获得你想要的任何版本的图像,亚马逊使用这种方法,就像所有那些占位符图像生成网站一样。可以在 JavaScript 中生成 URL 并做任何你想做的事情。网站本身不需要缩略图层的任何知识,可能需要一些帮助方法来为您生成 URL。但是,这显然是最耗费资源的做事方式,您需要确保您的架构能够处理负载。您需要使用书中的所有技巧及时使缓存无效,避免对调整大小脚本等造成不必要的打击。

我是第三种做事方式的忠实拥护者,我喜欢图像生成与我的主要网站功能完全隔离,我喜欢相当大的灵活性,但是在配置你的服务器来处理它。

于 2011-05-19T19:41:19.553 回答
0

我告诉你我在做什么。我总是存储完整尺寸的图像,但使用带有前导零的 db ID 重命名它。在第一次使用时,我创建缩略图并将其存储在其他文件夹中,以便在下次调用时使用。

于 2011-05-16T04:51:34.367 回答
0

如果服务器空间和带宽是一个问题,您应该考虑使用 CDN。

亚马逊服务很好,

于 2011-05-16T04:52:15.303 回答