Cliquez

CAPTCHA Perl. Génération avec ImageMagick

Un captcha petit générateur de fonction pour perl imagemagick en appelant à l'image de la bibliothèque:: Magick.
Peut être utile lorsque l'hébergeur ne permet pas d'installer vos propres modules pour Perl (par exemple GD:: SecurityImage ou Auchten:: Captcha). Module de travailler avec ImageMagick ne doit pas par défaut sauf si un hôte très négligent.
Cette fonctionnalité peut être utilisée comme un appel de la bibliothèque, l'appel pour passer le nom du fichier et la ligne pour générer un CAPTCHA.

Le code de la fonction:

 #! / Usr / bin / perl # captcha générateur.  L'idée et les paramètres d'appel Convertir proviennent captcha.ru (http://captcha.ru/captchas/multiswirl/).  # Mettre en place une bibliothèque d'images:: Magick pour perl - dimio (www.dimio.org).  # 27/09/2009 image utilisation:: Magick; sous CreateCapImage ($$){ my ($ cap_string, $ filename) = @ _; my $ font = 'times.ttf'; my $ PointSize = 70; my $ path = ' . / '; my $ image = new Image:: Magick; # 1.  Créer une zone de 300x100 blanc.  $ Image-> Set (taille => '300x100 '); $ image-> ReadImage («xc: blanc'); # 2.  Nous imprimons en noir avec l'antialiasing $ image-> Set (Type => 'TrueColor, antialias =>' Vrai ', fill =>' noir ', la police # string $ string taille de la police $ font PointSize => $ police, PointSize => $ PointSize,); $ image-> Draw (primitive => 'texte', points => '20, 70 ', les lignes d'orientation de texte # à l'intérieur du texte de l'image => $ cap_string, # qui impriment) # 3.  Déplacer le centre de la gauche à 100 points + fluctuation aléatoire $ image-> Étendue (géométrie => '400x120 ', # changer la taille de l'image); $ image-> Rouleau (x => 101 + int (rand (4))) # 4.  L'angle de swirl premier aléatoire (de 37 à 51) $ image-> Swirl (degrés => int (rand (14)) 37,), n ° 5.  Déplacer le centre vers la droite par 200 pixels, également avec une fluctuation aléatoire de $ image-> Étendue (géométrie => '600x140 ', # changer la taille de l'image); $ image-> Rouleau (x => 3-int (rand (4))) , n ° 6.  La deuxième rotation (de 20 à 35) $ image-> Swirl (degrés => int (rand (15)), 20,,), n ° 7.  Le traitement final et la sortie $ image-> Rogner ('300x100 100 +17'); $ image-> Redimensionner ('150x50 '); $ filename = $ PATH.  $ Fichier, $ filename .= 'png.'; Ouvert (IMAGE filename ,'>',$) or die $;! $ Image-> Write (fichier => \ * IMAGES, filename => $ filename); close ( image); return $ filename;} 1; 

Exemple d'appel:

  # Appel script de CAPTCHA
 mon num1 $ = int (rand (11)) + int (rand (3));
 my $ num2 = int (rand (8)) + int (rand (4));
 my $ somme = $ num1 + num2 $;
 my $ num1 = cap_string $ .'+'.$ num2 .'=';
 my $ cap_digest = md5_hex ($ sum + 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\">"),
		 $ Query-> textfield (
				 -Name => 'cap_value »,
				 -Taille => 2,
				 -Maxlength => 2,
			 );

En conséquence, la page affiche l'image avec des symboles de la forme "12 7 =". La chaîne peut en principe être n'importe quoi.

Trop paresseux pour copier-coller - peuvent télécharger captcha.pl métrages et trois polices ttf .

Écrit sur les droits des curiosités pour vous, mais si quelqu'un venir dans maniable :)

Plus sur les mêmes sujets:

Catégorie Filed under: Internet , Codage | Tag Tags: , , , , | Commentaires 10 commentaires

Commentaires

10 commentaires à "CAPTCHA Perl. Génération avec ImageMagick »

  1. Mike a écrit:

    Quelque chose ne fonctionne pas!
    Image - juste un rectangle blanc sans texte, puis
    se dandiner sur
    print $ query-> em (""),
    $ Query-> textfield (
    -Name => 'cap_value »,
    -Taille => 2,
    -Maxlength => 2,
    );

    avec un message
    Impossible d'appeler la méthode "em" sur une valeur indéfinie dans / home / ... ....

    • dimio écrit:

      Dans l'exemple montré comme suit:

      print $ query-> em (" »)

      Et vous passez une chaîne vide.
      Module CGI est relié par le chemin?

      Comme pour le dessin - en premier lieu - la police est correcte? Deuxièmement - vous pouvez tordre les paramètres de génération. J'ai obtenu une image normale CAPTCHA avec les paramètres indiqués dans l'exemple.

    • dimio écrit:

      De toute évidence, cela coupe le code moteur ...

  2. Mike a écrit:

    Fabriqué comme suit:
    $ Query = new CGI;
    print $ query-> em (""),
    $ Query-> textfield (
    -Name => 'cap_value »,
    -Taille => 10,
    -Maxlength => 5,
    );
    tout fonctionnait bien, mais l'image est vide : (

  3. bash a écrit:

    donc fait un captcha ... ça fonctionne.
    et comment vérifier correctement son entrée et l'utilisateur?

    • dimio écrit:

      J'aurais pensé un hachage généré mots CAPTCHA et un hachage de l'entrée utilisateur et ensuite les comparer. Module Digest:: MD5 pour vous aider.

  4. bash a écrit:

    Eh bien la saisie de l'utilisateur de calculer le hash sans aucun problème ... mais comme un captcha hachage? il a déjà oublié, parce travaillé sur le captcha sortie du script.) Oui, et juste faire des scripts différents peuvent être - on affiche le captcha, et celui qui prend l'entrée ... ici et ici zamorochki I (

    • dimio écrit:

      Captcha Hash mettre dans un fichier ou d'une autre base de données (un fichier de plus logique et plus facile, mais si vous avez déjà une base de données pour le moteur - pourquoi ne pas créer une table là-bas), a passé (et si vous voulez - faute) hachages capture supprimé. Pour plus de commodité, vous pouvez attribuer des identifiants de certains CAPTCHA.

Laisser un commentaire