私は、異なるレイヤ(イメージ)を1つのイメージにマージして生成したイメージをクライアントに表示することで、クライアントが動的イメージを作成できるプロジェクトに取り組んでいます。現在、私のコードは私の上記のコードでこのイメージをRAMに保存してImageMagickを使って作業する
$output = uniqid().'.jpg';
exec('convert -size 600x800 xc:white '.$output);
$layers = array(//array of about hundreds of PNG images);
foreach($layers as $key => $singleLayer)
{
$layerIs = $singleLayer['image'];
$positionsXY = explode(',', $singleLayer['xy']);
exec('composite -geometry +'.$positionsXY[0].'+'.$positionsXY[1].' '.$layerIs.' '.$output.' '.$output);
}
$base64 = base64_encode(file_get_contents($output));
unlink($output);
return 'data:image/jpeg;base64,'.$base64;
のようなものですが、私は白の背景画像を生成し、その後もシングルこの画像ごとに時間を節約しながら、これらの画像は、100以上のもの、その上に複数のPNG画像をマージしています生成されたイメージを削除した後、最終イメージをクライアントに出力する。これはすべて約15秒かかります。
ImageMagickには、画像をハードディスクに保存する代わりにRAMに保存するオプションがありますが、これは自分の処理を高速化できますか?
私はこれを見つけましたが、それをどのように実装できるのか分かりませんでした。
image magickのreadImageBlob関数を試してみることができます:http://php.net/manual/en/imagick.readimageblob.phpイメージのmagickオブジェクトの '__toString'メソッドを使用してイメージを変数。 – Jite
@Jite ImageMagickでは賢明ではありません。あなたが気にしないなら、少しのコードで手の込んだことができるので、私はそれをより良く理解することができます。また、PHP手続き型言語ではなくImageMagickで作業するためにexec()コマンドを使用しています。それで変数を使うと混乱が起きるでしょう:( –
私はimagemagickのためにphp拡張子を使うことをお勧めしますが、それは可能でしょうか? 'phpinfo()'をチェックしてインストールされているか確認してください。もう少し説明してください。 – Jite