【发布时间】:2014-10-06 21:18:49
【问题描述】:
所以我想做的是将图像存储在数据库中而不是文件系统上。在存储它们之后,我想检测图像是彩色的还是黑白的,将图像裁剪为我稍后指定的大小,等等。
另外,我不希望通过 Java、C# 或 PhP 等覆盖应用程序完成图像处理,因为我的数据库可能会在不使用任何覆盖应用程序的情况下被间接访问。
为了存储图像,我检查了以下 DBMS:
- Oracle Multimedia(以前称为 Intermedia),但找不到真正的图像处理文档,而且不同模块的安装也相当混乱。
- IBM DB2,尽管图像扩展器已经停产,我还是找到了合适的第三方图像处理库 ImageMagick。从我读过的任何内容来看,这是最适合我的要求的扩展数据库,但我对它的实用性有点怀疑,因为它已经很老了(http://www.ibm.com/developerworks/data/library/techarticle/dm-0504stolze/
- 带有 Filestream 的 SQL 服务器,我可以将图像存储为 BLOB,但我再次不确定如何满足我的要求。
- 带有 GridFS 的 MongoDB,这也有助于存储图像,但不能精确操作。
我现在迷路了,需要一个可以继续前进的方向,这样我就不会再纠结于选择合适的数据库了。任何替代的 DBMS 或方法来做我想做的事情都非常受欢迎。
【问题讨论】:
-
我想你会发现你对这些选择中的任何一个都感到失望。这些都不是图像编辑器,它们是数据库。它们并非旨在评估图像文件的内容。如果你想处理图像,你应该使用专为这类事情设计的程序。数据库是为存储数据而设计的,它们做得很好。
-
正如@Sean Lange 所说。总体而言,数据库“中”的任何图像操作可能更好地描述为由 DB 事件近端触发的图像操作。一个或另一个图像处理软件(如 ImageMagick)将被用于此目的,可能通过数据库中的自定义函数。可能任何支持用户定义的外部函数的数据库都可以这样做。
-
您应该将此信息存储在其他字段中,以便您可以查询它们。不要尝试实时评估此信息。 IE,如果您允许 3 种尺寸的拇指,请存储 3 种尺寸,当他们要求时不要转换它。但是,如果您需要,我知道如果您使用 CLR,您可以使用 MSSQL 执行此操作。只是不要指望它会很快。
-
我建议您在将大量图像存储在数据库中之前三思而后行——您往往会获得大量难以备份和管理的无定形信息。我会考虑将图像作为文件存储在文件系统中,然后将它们的引用放入数据库中。当然是 YMMV。
-
感谢 +Sean、+John、+Steve 和 +Mark 提供的所有帮助,我们终于使用 Oracle Multimedia 进行实施了。
标签: sql-server mongodb image db2 database