用于在服务器上组合图像流的可扩展解决方案



我正在Node.js上构建一个应用程序,旨在提供图像组合(多个图像的叠加作为一个图像)。用户最多可以选择十张图片并将它们组合起来。我们希望快速提供所选图像的最终组合,而不将其保存到服务器上。我们认为使用流是最好的方法,因为读取所有的图像会消耗我们的内存。是否有可能在飞行中组合图像流并为最终构图服务?

例如,这个管道是否可行:

  • 为从数据库到服务器的多个独立图像创建可读流。
  • 合并图像流
  • 将合成管道传送给用户

是否有可能在飞行中组合图像流并提供最终构图?

我不认为这是可能的读取图像作为一个流,因为压缩算法。它们不是设计来做这些的。如果您将图像存储为原始(位图)格式,这是可能的,但存储需求将显著增加。

关于可伸缩性。可伸缩性基本上意味着- 如果你给系统更多的资源可以完成更多的工作。从这个意义上说,你的问题本质上是可伸缩的。你所需要的只是部署更多的进程实例来处理图像覆盖,并把它们放在某种平衡器后面(如果你使用HTTP作为你的应用协议,这很容易)。

所以,我认为可伸缩性对您的系统来说应该不是问题。但性能和效率可以。

说到性能,图像叠加需要大量的计算,所以计算应该高效地完成。因此,我建议为您的平台找到一些可以有效地进行图像覆盖的库,或者将此类库集成到您的平台中。例如考虑使用ImageMagic或OpenCV。

基本上,任何允许你在矩阵上执行大量并行操作的库都可以。因为这是图像叠加操作的本质。

另一个解决方案是使用GPU,因为这些设备是专门为这些类型的问题而创建的,并且允许在图像上执行大规模并行操作。当然,使用GPU是对应用程序部署方案的限制。所以在大多数情况下它不是一个选项

最新更新