/ サーバー上で画像ストリームを結合するための/スケーラブルなソリューション - 画像、ストリーム、スケーラビリティ

サーバー上で画像ストリームを組み合わせるためのスケーラブルなソリューション - 画像、ストリーム、スケーラビリティ

私はNode上でアプリケーションを構築しています。jsは画像合成を提供することを意味していました(複数の画像のオーバーレイを1つの画像として提供)。ユーザーは最大10枚の画像を選択して組み合わせることができます。選択した画像の最終的な構成を、サーバーに保存せずにすばやく配信したいです。すべての画像を読むことで私たちの記憶が浪費されるので、ストリームを使うことがこれを行うための最良の方法だと思います。オンザフライで画像ストリームを組み合わせて最終的なコンポジションを提供することは可能ですか?

例えば、このパイプラインは可能ですか?

  • データベースからサーバーへの複数の個々の画像用の読み取り可能なストリームを作成します。
  • 画像ストリームを結合する
  • ユーザーにコンポジションをパイプする

回答:

回答№1は1

オンザフライで画像ストリームを組み合わせて最終的なコンポジションを提供することは可能ですか?

イメージとして読むことはできないと思います圧縮アルゴリズムのためにストリーム。彼らはそれをするようには設計されていません。あなたが生の(ビットマップ)フォーマットで画像を保存するならばそれは可能ですが、必要な記憶容量はかなり大きくなります。

スケーラビリティについてスケーラビリティは基本的には - システムにより多くのリソースを与えるなら、もっと多くの仕事ができるでしょう。。その意味で あなたの問題はスケーラブルです 元々。必要なのは、画像のオーバーレイを行うプロセスのインスタンスをさらに展開し、それらをある種のバランサの背後に置くことです(アプリケーションプロトコルとしてHTTPを使用している場合は非常に簡単です)。

だから、スケーラビリティはあなたのシステムにとって問題にならないはずです、と私は思います。しかし、パフォーマンスと効率性は向上します。

性能といえば、画像のオーバーレイには多くの計算が行われるので、計算は効率的に行われるべきです。だから私は私がお勧めすることは効率的にイメージオーバーレイをすることができるあなたのプラットフォーム用のライブラリを見つけること、あるいはあなたのプラットフォームにそのようなライブラリを統合する方法です。使用を検討してください ImageMagic または OpenCV、 例えば。

基本的には、行列に対して大規模な並列操作を実行できるライブラリならどれでも構いません。これが本来の画像オーバーレイ操作なのですから。

別の解決策はそれらのデバイスとしてGPUを使うことですこれらのタイプの問題に対しては特に作成されており、画像に対して大規模な並列操作を実行できます。もちろん、GPUを使用することはアプリケーションのデプロイメントスキームに対する制限です。したがって、ほとんどの場合これは選択肢ではありません。