【问题标题】:How to create thumbnails within PostgreSQL如何在 PostgreSQL 中创建缩略图
【发布时间】:2011-04-28 14:40:40
【问题描述】:

我想在 PostgreSQL 表中存储图像和其他文档,以及每个图像的缩略图。原始文档和缩略图将是两个独立的 bytea 字段。 PostgreSQL 在 Linux 上运行。

因为图像数据可能来自多个不同的应用程序,我希望 PostgreSQL 中的图像处理代码(用于创建缩略图)作为一个函数,而不是每个单独的应用程序都必须创建缩略图。 PostgreSQL 有什么方法可以创建图像的缩略图吗?

【问题讨论】:

  • 您的中间层使用哪些平台?
  • @Jordan 我们没有中间层。业务逻辑在数据库中

标签: postgresql image-scaling


【解决方案1】:

PostPic 听起来像您正在寻找的 Postgres 扩展。

正如他们的wiki 中所述,您将能够轻松调整大小和创建缩略图:

FUNCTION thumbnail(i image, size INT) RETURNS image

FUNCTION resize(i image, w INT, h INT) 返回图片

【讨论】:

    【解决方案2】:

    我是否可以建议您的所有应用程序改为使用通用接口或 API?

    对于我的摄影平台,我有一个上传 API,一切都可以通过,尽管有大约 4 种不同的方式来实际执行上传(浏览器、桌面、手机和软件插件)。然后,上传 API 具有使用一些强大且高性能的库(我使用的是 Python,所以 PIL)来操作图像的功能,然后将它们保存到数据库中(实际上,我正在保存到文件系统并在其中引用它们) DB,但想法是一样的)。

    另一种方法是缩略图生成器服务可以驻留在您的数据库之外,然后偶尔循环遍历所有尚未生成缩略图的行,生成一个,然后将其存储回 Postgres。

    如果您最终在 Postgres 内部进行图像处理,尤其是在内存方面,那么您要求的性能会受到损害。

    【讨论】:

      【解决方案3】:

      PostgreSQL 有什么办法 能够创建一个缩略图 图片?

      没有。 PostgreSQL 是一个数据库引擎,它只允许存储和检索数据,并在一定程度上对其进行操作。但是在里面做一些图像处理就太过分了。 图像大小调整应在数据库之外完成。

      并且,正如其他评论者所说,还考虑不将图像数据存储在数据库中的选项 - 仅一些路径或定位器。这是可选的,但通常更实用。 阅读一些相关问题: Storing Images in DB - Yea or Nay? , Storing a small number of images: blob or fs?

      【讨论】:

      • 当然 PostgreSQL 是一个数据库引擎,但是您可以使用多种语言编写函数来做任何事情。我们已经考虑过使用文件系统——这确实是我们现在正在做的事情——但这对于复制和维护引用完整性有很多不同的挑战。
      【解决方案4】:

      我只在 perl 中破解过一些琐碎的函数,但如果您安装 pl/perlu,可能会有很多合适的库。

      如果 pl/perl2 不是一个选项,请相应地配置 pl/perl:

      plperl.use_strict = true
      plperl.on_init = 'use stuff1; use stuff2;'
      

      【讨论】:

        【解决方案5】:

        最简单的答案:不要将图像存储在数据库中。它速度慢、效率低、无法扩展、备份时间更长。

        当您将它们存储在文件系统中时 - 只需添加中间件来调整它们的大小,或者添加一个简单的守护程序来调整所有新图像的大小。

        【讨论】:

        • 我们在 Postgres 中的经验是,它不慢,非常有效,它确实可以扩展,而且它使备份更容易。它维护了文件数据和元数据的引用完整性。
        • +1 对 Rob 的回复。快速、有效、可扩展、使备份更加更容易,并保持文件的引用完整性。只是...不在同一个元数据表中的 bytea 字段中。 :-)
        猜你喜欢
        • 1970-01-01
        • 2019-01-29
        • 1970-01-01
        • 2010-11-15
        • 2013-10-22
        • 1970-01-01
        • 2011-02-18
        • 2013-08-18
        • 1970-01-01
        相关资源
        最近更新 更多