Bueno, como dije, tengo una nueva versión del captcha (posteo solamente la parte que genera las imagenes por que sino no me dan 12 lineas.)
Código PHP:
<? Header("Content-type: image/jpeg");
$im = imagecreatefromjpeg ("captcha/".rand(1,12).".jpg");
$hm=strlen($letters="ABCDEFGHJKLMNPQRSTUVWXZ23456789")-1;
$bluealp = imagecolorallocatealpha ( $im, 0, 0, 0, 0 );
$t=$letters[rand(0,$hm)].$letters[rand(0,$hm)].$letters[rand(0,$hm)].$letters[rand(0,$hm)];
putenv('GDFONTPATH=' . realpath('.'));
imagettftext($im, rand(55,60), 0, 20, rand(63,70), $bluealp, 'gilr', $t[0]);
imagettftext($im, rand(55,60), 0, 45, rand(63,70), $bluealp, 'gilr', $t[1]);
imagettftext($im, rand(55,60), 0, 70, rand(63,70), $bluealp, 'gilr', $t[2]);
imagettftext($im, rand(55,60), 0, 95, rand(63,70), $bluealp, 'gilr', $t[3]);
Imagejpeg($im);
Imagedestroy($im);?>
Vamos a explicar que significan estas cosas:
<? <--- este es el tag de apertura, tambien puede ser <?php y en algunos casos puede ser <%
Header("Content-type: image/jpeg"); <--- esto le dice al navegador que es lo que está leyendo, pueden probar sacarlo para probar que pasa y ver el código fuente.
$im = imagecreatefromjpeg ("captcha/".rand(1,12).".jpg"); <--- Creamos una imagen desde uno de los 12 jpgs que hay en la carpeta "captcha", debemos tener en cuenta que el tamaño de la imagen se define a partir del tamaño del jpg sorteado. (en este caso todos miden 200*70px)
$hm=strlen($letters="ABCDEFGHJKLMNPQRSTUVWXZ234567 89")-1; <--- Guardamos muchos caracteres en $letters, lo medimos y su resultado le sacamos 1 y lo guardamos en $hm (How Many)
$bluealp = imagecolorallocatealpha ( $im, 0, 0, 0, 0 ); <--- creamos un color (negro) con 0 alpha para la img $im y guardamos su identificador en $bluealp (este nombre es por que lo saqué del anterior)
$t=$letters[rand(0,$hm)].$letters[rand(0,$hm)].$letters[rand(0,$hm)].$letters[rand(0,$hm)];
putenv('GDFONTPATH=' . realpath('.')); <--- guardamos 4 caracteres aleatoriamente seleccionados en $t para luego mostrarlos en la imagen. (si quieren usar la parte de la session en alguna parte es acá donde tienen que usarla.)
putenv('GDFONTPATH=' . realpath('.')); <--- Establecemos el directorio actual como directorio de fuentes para GD (esto nos salva de un error que aparece bastante)
imagettftext($im, rand(55,60), 0, 20, rand(63,70), $bluealp, 'gilr', $t[0]); <--- De izquierda a derecha:
- $im es el identificador de la imagen
- rand(55, 60) hace que el tamaño de la fuente varíe entre 55 y 60...
- 0 es la inclinación dada para el texto que estamos imprimiendo sobre la imagen
- 20 es la distancia al 0 sobre el eje X
- rand(63, 70) es la distancia al 0 sobre el eje Y (esta varia entre 63 y 70 en este caso)
- $bluealp es el identificador del color
- "gilr" es el nombre de la fuente sin la extencion(php agrega automáticamente la extención)
- $t[x] es el caracter de $t.
(Todo esto aparece 4 veces en el programa, yo lo aclaro una vez.) Imagejpeg($im); <--- Esto crea la imagen en un lenguaje que solo un interprete puede traducir a colores bonitos... Digamos que es lo que arma todo lo que pusimos antes.
Imagedestroy($im); <--- esto saca de la memoria (del servidor) todo lo necesario para que el cliente vea la imagen
?> <--- a que no saben que es esto?
Les dejo unas imágenes generadas por este programita:
Acá tienen una generada dinámicamente por mi server:
Su URL es
http://www.bayresart.com/fdw/captcha.php por si quieren entrar a verla. (apretar F5 varias veces sobre Foros Del Web no es buena idea.)
Bueno, pueden hacer lo que sea... Con un poco de astucia...
TODO ADENTRO DE UN RAR ACÁ:
http://www.bayresart.com/fdw/captcharar.rar (boton derecho, guardar enlace como)
Creo que es todo, solo armar la presentación me llevo mas tiempo que el programa....
"Quidquid latinum dictum sit, altum sonarum"