PHPで行う最速の画像合成を教えて下さい。
PHPを使用して、画質をあまり落とさず、1秒以下の処理時間で23個の画像を合成する方法(ロジック)を教えて下さい。
画像の合成をPHPで下記のソースのように組みましたが、横1120×縦2016のPNGファイル(容量は1ファイル当たり約
6.6KB~140KB)を23個合成して一つのファイルにする処理が終了すると、結果として合成された画質はキレイ(10段階中10の画質)ですが、処理時間が5.5秒程かかります。
そこで、合成素材の23個のファイルを全て半分の大きさ横560×縦1008にすると、結果として合成された画像の画質は結構落ちました(10段階中6の画質)が、処理時間は2.5秒程で終わりました。
希望としては、画質をあまり落としたくないので、小さくても横560×縦1008の画像を23個合成して処理時間を1秒以下にしたいのですが、以下のソースのやり方よりも処理が早く終わる
やり方をご存知の方はいませんか?
ご存知の方は、ご教授願います。
ちなみに、画像の種類は、使用できる色の種類が多いPNG形式で1秒以下の処理時間を実現したいです。
宜しくお願い致しますm(__)m
■環境
windows vista
xampp/apache 2.2.4
PHP Version 5.2.3
//23個のファイルをロード
$img1 = imagecreatefrompng(一個目のファイル);
$img2 = imagecreatefrompng(二個目のファイル);
~
$img23 = imagecreatefrompng(23個目のファイル);
//(白)の色を作成
$white1 = imagecolorallocate($img1, 255, 255, 255);
$white2 = imagecolorallocate($img2, 255, 255, 255);
~
$white23 = imagecolorallocate($img23, 255, 255, 255);
//白色を透過色へ
imagecolortransparent($img1, $white1);
imagecolortransparent($img2, $white2);
~
imagecolortransparent($img23, $white23);
//それらをひとつの画像に統合($img1を背景とすると。)
imagecopymerge($img1, $img2, 0, 0, 0, 0, 1120, 2016, 100);
imagecopymerge($img1, $img3, 0, 0, 0, 0, 1120, 2016, 100);
~
imagecopymerge($img1, $img23, 0, 0, 0, 0, 1120, 2016, 100);
//マージした後いらなくなった画像リソースをとりあえず解放
imagedestroy($img2);
~
imagedestroy($img23);
imagepng($img1,出力ファイル名);
imagedestroy($img1);
お礼
ご回答ありがとうございます。 ヘッダー関数にキャッシュさせない指定を次のようにしてみましたが、 改善されませんでした。 header("Cache-Control: no-cache"); header("Pragma: no-cache"); ですので、次にimgタグの呼び出し方を <img src="sample.php?<?php echo uniqid();?>"> として、phpのソース部分だけを抜き取ってsample.phpのファイルとしました。 残るHTMLタグは、test.phpというファイル名にして、このファイルを実行することで sample.phpを呼び出す処理をしてみました。 結果は、画像表示部分が×印になったので、imgタグの呼び出し部分を <img src="test_img.png?<?php echo uniqid();?>"> に変えて実行したら画像が表示されましたが、 右クリック→ソースを表示では<img src="test_img.png?<?php echo uniqid();?>">のまま なので画像の内容を更新して表示すると更新前の表示となります。 この状態でソースの表示をしてみると<img src="test_img.png?<?php echo uniqid();?>">のまま なので同じファイル名と認識されたのかな?と思ってます。 いただいたアドバイス通りにできていないのでしょうか?