CAPTCHA Perl. Generación con ImageMagick
Un generador pequeño código de la imagen para la función de perl imagemagick llamando a través de la Biblioteca de imágenes:: Magia.
Puede ser útil cuando el proveedor de alojamiento no permite instalar sus propios módulos de perl (por ejemplo, GD:: SecurityImage o Auchten:: Captcha). Módulo para trabajar con ImageMagick no por defecto a menos que un anfitrión muy negligente.
Esta característica se puede utilizar como una llamada a la librería, la llamada para pasar el nombre del archivo y la línea de generar un CAPTCHA.
#! / Usr / bin / perl código de la imagen # Generator. La idea y los parámetros de llamada Convertir se han tomado de captcha.ru (http://captcha.ru/captchas/multiswirl/). # Implementación de una Biblioteca de imágenes:: Magia de perl - dimio (www.dimio.org). # 27/09/2009 Imagen de uso:: Magick, sub CreateCapImage ($$){ my ($ cap_string, $ nombre) = @ _; my $ font = "times.ttf"; my $ PointSize = 70; my $ path = ' . / '; my $ imagen = new Image:: Magick, n º 1. Cree un cuadro de 300x100 blanco. $ Imagen-> Set (size => '300x100 '); $ imagen-> ReadImage (' xc: blanco '); # 2. Imprimimos en color negro con antialiasing $ imagen-> Set (type => 'color verdadero ", antialias =>' True ', fill =>' negro ', la fuente # cadena STRING $ tamaño de la fuente $ fuente PointSize => $ fuente, PointSize => $ PointSize,); $ imagen-> Draw (primitiva => 'text', puntos => '20, 70 ', # líneas de orientación del texto dentro del texto de imagen => $ cap_string, que imprimen #) # 3. Mover el centro hacia la izquierda a 100 puntos + fluctuación aleatoria $ imagen-> Extensión (geometría => '400x120 ', # cambia el tamaño de la imagen); $ imagen-> Roll (x => 101 + int (rand (4))) # 4. El ángulo del remolino primero al azar (de 37 a 51) $ imagen-> Remolino (grados => int (rand (14)) 37,), # 5. Mover el centro hacia la derecha por 200 píxeles, también con una fluctuación aleatoria de $ imagen-> Extensión (geometría => '600x140 ', # cambia el tamaño de la imagen); $ imagen-> Roll (x => 3-int (rand (4))) , n º 6. La segunda rotación (de 20 a 35) $ imagen-> Remolino (grados => int (rand (15)), 20,,), # 7. El procesamiento final y la salida $ imagen-> Cultivos ('300x100 100 +17'); $ imagen-> Cambiar el tamaño ('150x50 '); $ archivo = $ path. $ Archivo, $ archivo .= 'png'.; Abierto (IMAGEN ,'>',$ nombre) or die $, $ imagen-> Write (archivo => \ * IMAGEN, nombre => $ archivo); cierre ( IMAGEN); return $ nombre;} 1;
# De llamadas guión de CAPTCHAs my $ num1 = int (rand (11)) + int (rand (3)); my $ num2 = int (rand (8)) + int (rand (4)); my $ suma = $ num1 + $ num2; my $ cap_string = $ num1 num2 .'+'.$ .'='; mi = $ cap_digest md5_hex ($ suma + rand (100) + rand (50)); my $ cap_url = & CreateCapImage ($ cap_string, $ cap_digest); $ Cap_url = ~ s | / home / dimioorg / public_html / dimioorg | |; $ Cap_url = 'http://www.dimio.org' $ Cap_url.; print $ query-> em ("<img src=\"$cap_url\">"), $ Consulta-> textfield ( -Nombre => 'cap_value, -Size => 2, -Maxlength => 2, );
Como resultado, la página mostrará la imagen con los símbolos de la forma "12 7 =". La cadena puede en principio ser cualquier cosa.
Demasiado perezoso para copiar y pegar - pueden descargar captcha.pl característica y tres fuentes TTF .
Escrito sobre los Derechos de los lugares de interés para usted, pero si alguien muy útil ![]()
Más sobre temas similares:
Filed under: Internet , Codificación |
Tags: código de la imagen , procedimientos para , imagemagick , perl , programación |
10 comentarios 

Algo no funciona!
Imagen - sólo un rectángulo blanco, sin texto, y luego
contoneo de
print $ query-> em (""),
$ Consulta-> textfield (
-Nombre => 'cap_value,
-Size => 2,
-Maxlength => 2,
);
con un mensaje
No se puede llamar al método "em" en un valor no definido en / home / ... ....
En el ejemplo que se muestra como sigue:
Y se pasa una cadena vacía.
Módulo CGI es conectado por el camino?
En cuanto a la elaboración - en el primer lugar - el tipo de letra es la correcta? En segundo lugar - usted puede torcer los parámetros de generación. Obtuve una imagen CAPTCHA normal con los parámetros indicados en el ejemplo.
Claramente, esto reduce el código del motor ...
Hizo de la siguiente manera:
$ Query = new CGI;
print $ query-> em (""),
$ Consulta-> textfield (
-Nombre => 'cap_value,
-Size => 10,
-Maxlength => 5,
);
todo funcionaba, pero la imagen está vacía
img src = \ "$ cap_url \" border = \ "2 \"
Puso en marcha para probar la máquina del servidor: - .
Perl v5.8.8
ImageMagick 6.5.9-9 02/25/2010 Q16
Image:: Magick (6.005009)
también lo hizo un captcha ... funciona.
y cómo comprobar correctamente la entrada y el usuario?
Me han descubierto un hash generado palabras CAPTCHA y un hash de la entrada del usuario y luego los compararon. Módulo Digest:: MD5 para ayudar.
Así la entrada del usuario para calcular el hash sin problemas ... pero como un código de la imagen de hash? que ya ha olvidado, porque trabajó en el código de la imagen de salida de secuencia de comandos.) Sí, y sólo lo hacen los scripts pueden ser diferentes - uno muestra el código de la imagen, y que toma la entrada ... aquí y aquí zamorochki I (
Código de la imagen de hash poner en un archivo u otra base de datos (un archivo más lógico y sencillo, pero si usted ya tiene una base de datos para el motor - ¿por qué no crear una tabla de allí), pasado (y si lo desea - falta) hashes captura eliminados. Para mayor comodidad, puede asignar determinados identificadores CAPTCHA.