2016-05-25 3 views
0

Rubyを使用して複数のソースイメージからアニメーションGIFファイルを生成しています。スループットを最大限にする/各GIFを作成するのに費やす時間を最小限にする必要があります。私は、必要なたびにディスクから読み込むのではなく、ソース画像をメモリ(おそらくMemcached)に保存したいと思っています。私はconvertをバッククォートで使用して、imagemagickコマンドをRubyから直接実行しています。rmagickまたはimagemagickでディスクのアクティビティを最小限にする

`convert -delay #{delay} -page #{w}x#{h}+0+0 src01.gif... etc` 

私は少し、私はより多くの例を見つけたとして、私は直接ImageMagickのドキュメントを参照することができRMagickの上にこれを好みます。 convertコマンドに渡された画像は、ディスク上の画像へのパスである必要があります。さらに、変換されたイメージの出力がファイルパスであるためImageMagickによってディスクに書き込まれるため、Rubyを使用してイメージデータにアクセスする必要があります。私はImageMagickに毎回ディスクからソースイメージを読み込ませ、生成されたGIFを毎回ディスクに書き込むように思えます。私は、Rubyで画像データにアクセスする必要がある生成された画像を一時的に保持する必要がないので、これはボトルネックであり、不要であると思います。

私は、RMagickメソッドがファイルパスの代わりにパラメータとしてMagick::Imageを使用できることに気付きました。この場合、ソース画像をメモリに保存することができます。さらに、RMagickは生成されたイメージをデータとしてRubyに返します。これは必要なものです。ディスクに書き込む必要はありません。

私は、ディスクの活動を減らすために

`convert...` 

の代わりにRMagickを使用してと思っています。

質問1:これは意味がありますか? RMagickはおそらくImageMagickをラップするので、RMagickは実際にディスクに読み書きしているのでしょうか、それともディスクの動作なしでImageMagickを利用する方法がありますか?

質問2:ImageMagickの変換コマンドに画像データを取り込む方法はありますか?

希望はこれが理にかなっています。ちょうど私の頭をこの周りに包み込み、私が不明な場合は謝罪しています。

+3

あなたは多分一つの選択肢として、小さなRAMディスクにすることを検討できます。 –

+0

もちろん、あなたはまた、Rubyの構文の確認が、PHPで... /ルビー内の画像を生成し、シーケンスからアニメーションGIFを作成しないで蓄積することができ、あなたが持っているまで、あなたは、フレーム毎に 'addImageを()'を行います完全なシーケンス、次に 'setImageDispose()'と 'writeImages(" animated.gif "、true)'を実行します。 –

答えて

1

これは意味がありますか?

実際はありません。私たちはオープンなfdと、直接的なAPIよりもシェル環境のコストについて議論することができますが、変換ユーティリティ& RMagickの間にディスクI/Oの利点はありません。

ImageMagickの変換コマンドに画像データを取り込む方法はありますか?

ImageMagickはstreamユーティリティと一緒に出荷されます。使用法のドキュメントはあまりありませんが、イメージデータをmemcachedを介して配布可能なブロブに抽出することができます。

ラベルベースのメモリアクセスを処理するにはmpr:プロトコルもありますが、それは探している分散型ソリューションではない可能性があります。 Plusデータは、処理完了時に削除されます。

RAMdiskについての個人的なコメントは、私が推奨するものです。単純なメモリ/ tmpfsのマウントセットアップするには、システム上で簡単ですし、それだけで使用することにpolicy.xml構成を更新する事になり、一時ディレクトリとしてマウントしました。

関連する問題