基本的にはアバターの各部品の合成というものであれば、元の画像をそのままマージするだけなので、GDでも遜色なく出来るはずです。アニメーションGIFを使うとかといったことがなければ。(どちらにしてもアニメーションGIFを使うということは色数255色っていう制限かかるので、また別の大変さがありそう。)
とりあえず三つの同じ大きさの画像をマージするというサンプルを書きました。
<?php
//とりあえず三つの画像をロード
$img1 = imagecreatefrompng('image1.png'); //100 x 100の画像
$img2 = imagecreatefrompng('image2.png'); //100 x 100の画像
$img3 = imagecreatefrompng('image3.png'); //100 x 100の画像
//FFFFFF(白)の色を作成
$white1 = imagecolorallocate($img1, 255, 255, 255);
$white2 = imagecolorallocate($img2, 255, 255, 255);
$white3 = imagecolorallocate($img3, 255, 255, 255);
//白の色を透過色とする。(これらは白じゃなくても使っていない色とかでもOK)
imagecolortransparent($img1, $white1);
imagecolortransparent($img2, $white2);
imagecolortransparent($img3, $white3);
//それらをひとつの画像に統合($img1を背景とすると。)
imagecopymerge($img1, $img2, 0, 0, 0, 0, 100, 100, 100);
imagecopymerge($img1, $img3, 0, 0, 0, 0, 100, 100, 100);
//マージした後いらなくなった画像リソースをとりあえず解放
imagedestroy($img2);
imagedestroy($img3);
//画像を表示する
header('Content-Type: image/png');
imagepng($img1);
?>
こんな感じでしょうか。私も仕事でバリバリ使っているというわけではないので、実際もっとよい書き方とかあるかもしれませんが、一応これで画像の合成が出来ます。
imagecopymerge(またはimagecopy)の引数を調整すれば、合成時の座標位置を変更できたりします。
お礼
ありがとうございます。 サンプルまでいただけるとは思いませんでした。 実行してみたら成功しました。 アニメーションまで求めていなかったので、おっしゃる通りGDでも行けると思いました。 あとは部分的なパーツを前面に出したり人の形の背面に表示するのが課題ですが、 もっとGDを勉強していこうと思います。 道が開けました。 本当にありがとうございました。