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);
お礼
遅くなってしまいすみません。 上記の方法を試してみました。 やはり、透明色をしていできないので、画像Aの背景色を白にして、 imagecolortransparentで色抜き処理をしてみました。 結果として、GIFと同じ透過の処理になりました。 (画像の縁にジャギがでてしまう) pngの透過はできないのでしょうか・・・ アドバイスありがとうございました。 もう少し他にないかまってみようと思います。
補足
ご回答ありがとうございます。 試してみようと思うのですが、 すでにpngファイルで、色抜きしたい部分を透過で書き出しているのですが、 透明の部分の色をどうしてしたらいいのか分かりません。 逆に白(または黒)バックにして、色指定して抜かないといけないのでしょうか。 まだ試していないのですが、その場合GIFみたいが、縁にジャギができないかが気になります。 試してみてからまた書き込みさせていただきます。