Klicken

CAPTCHA Perl. Generation mit ImageMagick

Ein kleiner Generator-Funktion Captcha für perl imagemagick durch den Aufruf durch die Bibliothek Image:: Magick.
Mai in praktisch, wenn der Hoster nicht erlaubt, eigene Module für Perl (z. B. GD:: SecurityImage oder Auchten:: Captcha) zu installieren. Module mit ImageMagick Arbeit nicht, es sei denn eine sehr nachlässige Host default.
Diese Funktion kann als Bibliothek aufrufen, wird der Anruf an den Dateinamen und Linie zu einem CAPTCHA generieren Pass verwendet werden.

Der Code der Funktion:

 #! / Usr / bin / perl # Generator Captcha.  Die Idee und das Konvertieren Aufrufparameter sind aus captcha.ru (http://captcha.ru/captchas/multiswirl/) übernommen.  # Die Implementierung einer Bibliothek Image:: Magick für perl - dimio (www.dimio.org).  # 2009.09.27 use Image:: Magick; sub CreateCapImage ($$){ my ($ cap_string, $ filename) = @ _; my $ font = 'times.ttf'; my $ pointsize = 70; my $ path = ' . / '; my $ image = new Image:: Magick; Nr. 1.  Erstellen Sie ein 300x100 weiße Feld.  $ Image-> Set (size => '300x100 '); $ image-> ReadImage (' xc: white '); # 2.  Wir drucken in schwarz mit Antialiasing $ image-> Set (type => 'TrueColor ", Antialiasing =>' True ', fill =>' black ', # String STRING Zeichensatz $ font size $ pointsize font => $ font, pointsize => $ pointsize,); $ image-> Draw (primitive => 'text', Punkte => '20, 70 ', # Orientierung Zeilen Text in das Bild text => $ cap_string, # dass Print) # 3.  Bewegen Sie die Mitte nach links auf 100 Punkte + Zufalls $ image-> Umfang (Geometrie => '400x120 ', # ändern Sie die Bildgröße); $ image-> Roll (x => 101 + int (rand (4))) # 4.  Die erste Drallwinkel nach dem Zufallsprinzip (37 bis 51) $ image-> Swirl (Grad => int (rand (14)) 37,), Nr. 5.  Bewegen Sie die Mitte nach rechts um 200 Pixel, auch mit einer zufälligen Schwankung von $ image-> Umfang (Geometrie => '600x140 ', # ändern Sie die Bildgröße); $ image-> Roll (x => 3-int (rand (4))) , Nr. 6.  Die zweite Drehung (20 bis 35) $ image-> Swirl (Grad => int (rand (15)), 20,,), Nr. 7.  Finale Bearbeitung und Ausgabe $ image-> Crop ('300x100 100 +17'); $ image-> Resize ('150x50 '); $ filename = $ path.  $ Dateiname, $ filename .= 'Png.'; Open (BILD ,'>',$ filename) or die $;! $ Image-> Write (Datei => \ * IMAGE, filename => $ filename); close ( IMAGE); return $ filename;} 1; 

Beispiel nennen:

  # Call-Skript von CAPTCHAs
 my $ num1 = int (rand (11)) + int (rand (3));
 my $ num2 = int (rand (8)) + int (rand (4));
 my $ summe = $ zahl1 + $ zahl2;
 my $ cap_string = $ num1 .'+'.$ 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-> Textfeld (
				 -Name => 'cap_value "
				 -Größe => 2,
				 -MaxLength => 2,
			 );

Als Ergebnis, wird die Seite und zeigt das Bild mit den Symbolen der Form "12 7 =". Der String kann im Prinzip alles sein.

Zu faul, um mit Copy & Paste - können Download-Funktion captcha.pl und drei ttf font .

Geschrieben über die Rechte von den Sehenswürdigkeiten für sich selbst, aber wenn jemand sich als nützlich erweisen :)

Mehr zu ähnlichen Themen:

Kategorie Filed under: Internet , Coding | Tag Tags: , , , , | Kommentare 10 Kommentare

Kommentare

10 Kommentare zu "CAPTCHA Perl. Generation mit ImageMagick "

  1. mike schrieb:

    Etwas funktioniert nicht!
    Bild - nur ein weißes Rechteck mit keinen Text, und dann
    watscheln auf
    print $ query-> em (""),
    $ Query-> Textfeld (
    -Name => 'cap_value "
    -Größe => 2,
    -MaxLength => 2,
    );

    mit einer Botschaft
    Kann nicht anrufen Methode "em" auf einen nicht definierten Wert unter / home / ... ....

    • dimio schreibt:

      In dem Beispiel wie folgt dargestellt:

      print $ query-> em (" ")

      Und Sie einen leeren String übergeben.
      CGI-Modul ist durch die Art und Weise miteinander verbunden?

      Wie bei der Zeichnung - in erster Linie - die Schrift ist richtig? Zweitens - man kann es drehen die Erzeugung Parameter. Ich erhielt eine normale CAPTCHA-Bild mit den angegebenen Parametern im Beispiel.

    • dimio schreibt:

      Es ist klar, schneidet diese den Motor Code ...

  2. mike schrieb:

    Aus wie folgt:
    $ Query = new CGI;
    print $ query-> em (""),
    $ Query-> Textfeld (
    -Name => 'cap_value "
    -Size => 10,
    -MaxLength => 5,
    );
    alles funktioniert, aber das Bild ist leer : (

  3. bash schrieb:

    so hat ein Captcha ... es funktioniert.
    und wie man richtig überprüfen Sie deren Eingangs-und der Benutzer?

    • dimio schreibt:

      Ich würde ein Hash generiert CAPTCHA Worte und einen Hash von Benutzereingaben gedacht haben und dann miteinander verglichen. Modul Digest:: MD5 zu helfen.

  4. bash schrieb:

    Nun die Eingabe des Benutzers, um den Hash ohne Probleme berechnen ... aber als Hash captcha? er ist schon wieder vergessen, weil arbeitete an der Skript-Ausgabe Captcha.) Ja, und just do it verschiedenen Skripte werden können - eine zeigt das Captcha, und eine, die Eingabe erfolgt ... hier und hier zamorochki I (

    • dimio schreibt:

      Hash captcha in einer Datei oder einer anderen Datenbank put (eine Datei mehrere logische und einfacher, aber wenn Sie bereits eine Datenbank für den Motor - warum nicht eine Tabelle erstellen, gibt es), verbrachte (und wenn Sie wollen - Foul) Hashes erfasst gelöscht. Der Einfachheit halber können Sie weisen bestimmte Kennzeichen CAPTCHA.

Hinterlasse eine Antwort