ich habe Dein Script jetzt nicht weiter untersucht, aber mMn fehlt da ein Content-Header.
Ausschnitt aus dem OP:
header('Content-type: image/png');
$img = ImageCreateFromPNG('captcha.png'); //Backgroundimage
$color = ImageColorAllocate($img, 0, 0, 0); //Farbe