2

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

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

4

5 回答 5

6

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

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

FUNCTION thumbnail(i image, size INT) 返回图片

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

于 2016-03-21T06:32:03.473 回答
2

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

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

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

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

于 2011-04-28T14:46:32.310 回答
0

PostgreSQL 有什么方法可以创建图像的缩略图?

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

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

于 2011-04-28T16:52:11.487 回答
0

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

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

plperl.use_strict = true
plperl.on_init = 'use stuff1; use stuff2;'
于 2011-05-08T15:07:59.017 回答
-2

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

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

于 2011-04-28T14:56:31.047 回答