En este tutorial vamos a aprender cómo autogenerar imágenes CAPTCHA con PHP. Lo haremos únicamente haciendo uso de código sin utilizar alguna imagen base o algún recurso externo que no sea PHP. Es decir, generaremos una imágenes únicamente con código PHP.
Nos basaremos en que existe un conjunto de funciones e instrucciones en PHP las cuales nos permiten la creación de un archivo imagen (png, jpg, etc) en el servidor. Es decir, con PHP no solamente podemos crear páginas dinámicas sino también imágenes dinámicas.
Lo primero que haremos será definir el alto y el ancho de nuestra imagen a crear. Como será una imagen utilizada para CAPTCHA no tiene por qué ser grande.
$ancho = 100; $alto = 30;
Luego, llamaremos a la función imageCreate que nos permitirá crear una imagen en “blanco” con las medidas que hemos indicado anteriormente.
$imagen = imageCreate($ancho, $alto);
La referencia a esta imagen la guardaremos dentro de la variable $imagen.
Ahora, le daremos un color de fondo a la imagen. Este color será definido mediante los valores rgb correspondientes. En este caso, le pondremos color de fondo amarillo mediante la función ImageColorAllocate y ImageFill.
$amarrillo = ImageColorAllocate($imagen, 255, 255, 0); ImageFill($imagen, 0, 0, $amarillo);
Esta última imagen le da el color creado ($amarrillo) a la imagen asignada ($imagen).
Hasta ahora hemos podido obtener un rectángulo de color amarillo de 100×30. Para que sea una imagen CAPTCHA, debemos dibujar también números que el usuario tendrá que identificar y digitar. Para lograr esto, crearemos un texto el cual será una cantidad determinada de dígitos con un color específico. En este caso, será de color rojo y tendremos 6 dígitos completamente al azar.
$rojo = ImageColorAllocate($imagen, 255, 0, 0); $numero = rand(100000, 999999); ImageString($imagen, 5, 25, 5, $numero, $rojo);
En la variable $rojo tenemos el color con el cual pintaremos los dígitos a escribir. En la variable $numero tenemos un número aleatorio el cual escribiremos. Con la función ImageString estamos escribiendo el contenido de la variable $numero en la imagen $imagen en las coordenadas 25, 5.
Con esto, hemos logrado imprimir una cadena de números dentro de una imágen. Estos números son completamente al azar por lo que nos servirán a modo de imagen CAPTCHA. El único paso que queda pendiente es validar en un formulario que el CAPTCHA ingresado corresponda y sea idéntico al CAPTCHA generado e impreso en la imagen. De ser este el caso entonces se procederá a procesar el formulario. En caso no coincida, se mostrará un mensaje de error indicando que el CAPTCHA no es el correcto. También se podrían generar opciones adicionales como “Refrescar” para generar una nueva imagen CAPTCHA o “Escuchar” para leer el CAPTCHA mediante un sistema automatizado de voz.