Cliquez sur

Perl CAPTCHA. Généré avec ImageMagick

Un captcha petite fonctionnalité de génération pour perl imagemagick en appelant une image de bibliothèque :: Magick.
Il peut être utile dans le cas où l'hébergeur ne permet pas d'établir leurs propres modules pour perl (par exemple GD :: SecurityImage ou Auchten :: Captcha). Module de travailler avec ImageMagick ne devrait pas défaut, sauf si un hôte très négligente.
Cette fonctionnalité peut être utilisée comme un appel de la bibliothèque, l'appel pour passer le nom du fichier et la ligne afin de générer un CAPTCHA.

Le code de la fonction:

 #! / Usr / bin / perl # générateur de captcha.  L'idée et les paramètres d'appel sont prises à partir Convertir captcha.ru (http://captcha.ru/captchas/multiswirl/).  # La mise en œuvre d'une bibliothèque pour l'image :: Magick perl - dimio (www.dimio.org).  # 27/09/2009 image utilisation :: Magick; sous CreateCapImage ($ $) {my ($ cap_string, $ filename) = @ _; my $ font = 'times.ttf'; my $ pointsize = 70; mon chemin $ = ' . / '; my $ image = new Image :: Magick; n ° 1.  Créer une zone de 300x100 blanc.  $ Image-> Set (taille => '300x100 '); $ image-> ReadImage («xc: blanc'); n ° 2.  Nous imprimons en noir avec l'antialiasing $ image-> Set (type => 'TrueColor », antialias =>' True ', fill =>' noir ', la police # string $ string taille de la police $ font pointsize => $ police, pointsize => $ pointsize,); $ image-> Draw (primitif => 'texte', points => '20, 70 ', # orientation d'une ligne de texte dans le texte de l'image => $ cap_string, # que l'impression) # 3.  Déplacer le centre à la gauche de 100 points de + de la fluctuation aléatoire de $ image-> Étendue (géométrie => '400x120 ', # changer la taille de l'image); $ image-> Rouleau (x => 101 + int (rand (4))) # 4.  Le tourbillon d'abord à un angle aléatoire (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 (20 à 35) $ image-> Swirl (degrés => int (rand (15)), 20,,), N ° 7.  Le traitement final et la sortie de $ image-> Rogner ('300x100 100 +17'); $ filename = $ path; $ image-> Redimensionner ('150x50 ').  $ Filename =; $ nom_fichier '. Png. »; Ouvert (IMAGE,'> ', $ filename) or die $;! $ Image-> Write (fichier => \ * IMAGE, filename => $ filename); close ( IMAGE); return $ filename;} 1; 

Exemple appeler:

  Challenge # Captcha du script
 mon num1 $ = int (rand (11)) + int (rand (3));
 mon num2 $ = int (rand (8)) + int (rand (4));
 my $ somme = $ num1 + num2 $;
 my $ = $ num1 cap_string '+' $ ​​num2 '='...;
 my $ cap_digest = md5_hex ($ somme + rand (100) + rand (50));
 mon 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 (
				 -Nom => 'cap_value »,
				 -Taille => 2,
				 -Maxlength => 2,
			 );

En conséquence, la page affichera une image avec des symboles de la forme "12 7 =". La ligne peut en principe être n'importe quoi.

Pour paresseux pour copier-coller - peut télécharger la fonction et trois police ttf captcha.pl .

Écrit sur les droits des sites pour vous-même, mais si quelqu'un peut venir dans maniable :)

Plus d'informations sur des sujets similaires:

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

Commentaires

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

  1. Mike a écrit:

    Quelque chose ne fonctionne pas!
    Photo - juste un rectangle blanc sans texte, puis
    de se dandiner sur
    print $ query-> em (""),
    $ Query-> textfield (
    -Nom => '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 illustré comme suit:

      print $ query-> em (" ")

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

      Comme pour l'image - d'abord - la police est correcte? Deuxièmement - vous pouvez faire pivoter les paramètres de génération. Je reçois une image normale d'un CAPTCHA lorsque ces paramètres dans l'exemple.

    • dimio écrit:

      De toute évidence, cette coupe du code du moteur ...

  2. Mike a écrit:

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

  3. bash a écrit:

    tout comme le captcha ... ça marche.
    et comment le vérifier et entrer l'utilisateur?

    • dimio écrit:

      J'aurais pensé que quelques mots de hachage générées CAPTCHA et de hachage de la saisie de l'utilisateur, puis de les comparer. Module Digest :: MD5 pour vous aider.

  4. bash a écrit:

    Eh bien, je calcule le hachage de l'utilisateur sans aucun problème ... mais comme un hachage de captcha? il a déjà oublié, parce que travaillé sur le captcha sortie du script.) Oui, et Just Do It différents scripts peuvent être - on affiche le captcha, et celui qui prend l'entrée ... c'est zamorochki moi ici (

    • dimio écrit:

      Captcha Hash mettre dans un fichier ou base de données d'autres (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 le souhaitez - pourris) hachages capture supprimé. Pour plus de commodité, vous pouvez attribuer un certains identificateurs CAPTCHA.

Laisser un commentaire