【问题标题】:MongoDB GridFS store multiple sizes of image or use on the fly resizingMongoDB GridFS 存储多种大小的图像或使用动态调整大小
【发布时间】:2011-11-22 21:10:37
【问题描述】:

在我的网络应用程序中,我使用 MongoDB GridFS 来存储用户上传的图像。

网站的其余部分由 MySQL 管理。

在照片表中(在 mysql 中)我有三个字段用于存储文件对象的 MongoId。

  • 中等

所以我存储了图像的三个版本。小、中、大。

我的问题是,有时我需要使用比图像的“小”版本更小的缩略图(即在小部件框、消息头像等中),或者我需要使用稍微小一点的版本中等图片。

所以我的问题是,最好只在 GridFS 系统中存储一张图像,然后在照片表中使用一个字段来存储 MongoID,然后创建一个动态调整图像大小的脚本(即http://localhost/image/fetch/{mongoid }?resize=50

否则,在我的数据库中,我需要 thumbnail_50、thumbnail_100、medium_300、medium_400 等等。

采用即时调整大小路线会有什么影响?这是一个坏主意还是个好主意?你会怎么做?

谢谢。

【问题讨论】:

  • 我会得到最接近的尺寸,然后通过 javascript 处理它的客户端尺寸

标签: php mysql mongodb gridfs database


【解决方案1】:

动态调整大小将导致服务器上的 CPU 负载比一次调整大小并存储结果要多得多。另一方面,提前调整大小可能会导致更大的数据集存储在 GridFS 中。换句话说,这是一种权衡。

您可以考虑一种混合方法,即动态调整大小,但将结果保存回 GridFS,这样您就无需多次将任何图像调整为给定大小。

您还应该知道 HTML 和 CSS 允许使用各种选项来控制图像的显示大小。例如:

<img src="/path/to/image.jpg" width="50"/>

将导致图像按比例缩放为 50 像素宽(在大多数现代浏览器中,无论如何)。您还可以使用widthmax-width CSS 属性来控制图像大小。

就我自己而言,我对要存储的图像的体积或文件大小一无所知,我可能会在添加图像时调整大小——换句话说,只考虑一次页面速度和 CPU 负载——然后从 GridFS 中提供各种尺寸,如果在一种特定情况下需要稍微不同的尺寸,则使用 max-width 来控制屏幕尺寸。

【讨论】:

  • 嘿,我确实可以使用宽度/高度属性,但通过这种方法调整图像大小并不是最佳实践。此外,它会增加请求的大小。即,如果我有一个宽度为 100 的图像并且我正在使用宽度的 html 属性将大小调整为 50,那么我将使用不必要的资源(当然,它不会很大,但它会加起来)当我可以显示实际宽度为 50 的图像。您的混合方法肯定很有趣。如果我走这条路,我的数据库中仍然需要多个字段。
  • 如果您想使用宽度或高度,您应该尝试选择与您的目标最接近且大于显示尺寸的图像(即,不要过度缩小尺寸,并且不要拉伸东西)。大多数现代浏览器在调整图像大小时都使用平滑处理,因此它们看起来应该“不错”——但您的体验可能会有所不同。始终对事物进行测试以确保它们按您的意愿工作!
猜你喜欢
  • 2011-02-18
  • 1970-01-01
  • 2018-01-28
  • 2015-04-02
  • 1970-01-01
  • 2011-01-24
  • 1970-01-01
  • 2013-04-26
  • 1970-01-01
相关资源
最近更新 更多