Ver Mensaje Individual
  #11 (permalink)  
Antiguo 19/06/2008, 21:56
Avatar de mapper
mapper
 
Fecha de Ingreso: enero-2003
Ubicación: Argentina
Mensajes: 321
Antigüedad: 21 años, 3 meses
Puntos: 1
Respuesta: Que opinan? Imagen anti-bot

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 $im000);
$t=$letters[rand(0,$hm)].$letters[rand(0,$hm)].$letters[rand(0,$hm)].$letters[rand(0,$hm)];
putenv('GDFONTPATH=' realpath('.'));
imagettftext($imrand(55,60), 020rand(63,70), $bluealp'gilr'$t[0]);
imagettftext($imrand(55,60), 045rand(63,70), $bluealp'gilr'$t[1]);
imagettftext($imrand(55,60), 070rand(63,70), $bluealp'gilr'$t[2]);
imagettftext($imrand(55,60), 095rand(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:
  1. $im es el identificador de la imagen
  2. rand(55, 60) hace que el tamaño de la fuente varíe entre 55 y 60...
  3. 0 es la inclinación dada para el texto que estamos imprimiendo sobre la imagen
  4. 20 es la distancia al 0 sobre el eje X
  5. rand(63, 70) es la distancia al 0 sobre el eje Y (esta varia entre 63 y 70 en este caso)
  6. $bluealp es el identificador del color
  7. "gilr" es el nombre de la fuente sin la extencion(php agrega automáticamente la extención)
  8. $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"
__________________
-- May The Force Be With You --

Última edición por mapper; 19/06/2008 a las 21:57 Razón: Me olvide del rar