2017-12-08 13 views
0

私のアプリのユーザーは複数の写真をアップロードします(JPGとPNG形式でそれぞれ3000x2000など)。私のPHPプログラムでは、それらの写真をレイアウトし、1つの大きな写真にまとめる必要があります。PHPは超大規模の画像ファイルを作成します

たとえば、ユーザーは4つの写真(p1.jpg、p2.jpg、p3.jpg、p4.jpg)をアップロードし、それぞれ3000x2000です。 、全体のサイズがダウン縮小することができるように、私は(例えば、元の50%)、各画像を小さくすることができる

+-----+-----+ (overall witdh = 6000, overall height = 4000) 
| p1 | p2 | 
+-----+-----+ 
| p3 | p4 | 
+-----+-----+ 

- 私はこのような2×2のグリッドレイアウト内に4枚の画像を配置大きな画像を作成する必要がユーザーが8枚の画像または16枚の画像をアップロードすると、全体のサイズが再び大きくなります。

結果の画像はPHPで非常に高いメモリを消費するので、最小のメモリ消費でその大きな画像を作成する最良の方法は何ですか。

私が持っているアイデアは、ストリームを使用してチャンクで大きなデータファイルを処理することです。ですからチャンクごとのイメージマージを可能にするソリューション/ライブラリがあるのだろうかと思います。

+2

ジョブ・キューは、プロセスを消費し、そのようなメモリのために良いideeaだろう...今、あなたのアプリのハイテクスタック –

+1

に依存し、私は画像変換ジョブを受け入れる背景ワーカーを作成し、それは多くのメモリを使用しますという事実を受け入れるだろうあらかじめ決められた数のワーカーを稼働させるのに十分な大きさのサーバーを予約しておくことで、それらのワーカーが使用するメモリ量をいくらかコントロールすることができます。最後にやりたいことは、Webサーバーのスレッドでこの種のタスクを実行することです。それらのタスクは並行して制御されません。 – deceze

答えて

0

大きな画像をアップロードする代わりに、すべての画像を個別にアップロードすることができますが、表示中またはダウンロード中にアップロードされたすべての画像を1つの大きな画像レイアウトに変換するスクリプトを書くことができます。

画像に特定の位置がある場合は、http://fabricjs.com/というキャンバスライブラリを使用できます。このライブラリを使用すると、イメージをカスタマイズでき、データベース内のすべてのイメージの位置を保存し、後でその位置に従ってイメージを取得できます。

関連する問題