PHP:GDでPNG画像を作る

GDはイメージリソースを作ると、黒で塗りつぶすという余計な事をやってくれます。
そのため、まず間違いなく塗りなおす作業が必要です。
ちなみに、ImageMagickやPerlMagickでは xc:none で透明なキャンバスを作れます。

$image = imagecreatetruecolor( $width, $height ); // イメージリソースを作成
imagealphablending( $image, false ); // アルファブレンディングを無効(謎)
imageSaveAlpha( $image, true ); // アルファチャンネルを有効(謎)
$transparent = imagecolorallocatealpha( $image, 0, 0, 0, 127 ); // 透明度を持つ色を作成
imagefill( $image, 0, 0, $transparent ); // 塗りつぶす


以下のように、透明色だけを設定した場合、
その画像自体では透明になるけれど、他の画像と合成すると透過しなくなる。

// 透明色を灰色に設定(灰色が無い前提)
$transparent = imagecolorallocate( $image, 127, 127, 127 );
ImageColorTransparent( $image, $transparent );