Vamos, o indicas que es una imagen, o indicas que es contenido HTML, pero no ambos!
Si quieres guardarla en la PC en vez de mostrarla, entonces visita el manual para la función
imagepng(). Al igual que
imagegif() e
imagejpeg(), puede aceptar un segundo parámetro. en el que le indicas que deseas guardarla y no mostrarla. En este segundo parámetro debes especificar el nombre (y la ruta) de la nueva imagen que se va a guardar. Es ese caso, ya no es necesario que envies cabeceras al navegador indicándole que es una imagen lo que envías. Tendrías que hacerlo así:
Código PHP:
<?php
Function pass_gen($len=8){
$string = '';
$ok = false;
$chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
for ($i = 0; $i < $len; $i++){
$pos = rand(0, strlen($chars)-1);
$string .= $chars{$pos};
}
return ($string);
}
Function captcha(){
# header("Content-type: image/png"); //Esto ya no
$im = @imagecreate(100, 50) or die("Cannot Initialize new GD image stream");
$clave = pass_gen();
imagecolorallocate($im, 0, 0, 0);
$text_color = imagecolorallocate($im, 233, 14, 91);
imagestring($im, 5, 15, 15, $clave, $text_color);
$nombre_de_la_imagen = "$clave.png";
imagepng($im,$nombre_de_la_imagen);
imagedestroy($im);
return ($clave);
}
$c = captcha();
# header("Content-type: text/html;"); //No es necesario tampoco
echo $c;
echo 'No imprime nadaaa!!!!';
?>
Un saludo,