05.03.2006, 14:51
Da vor einigen Tagen ja bereits jemand ein Problem hatte mit einem Gästebuch, wo sich ein Bot eingeklingt hatte, habe ich mir überlegt mal ein eigenes Script zu basteln welches, mir ein Bild mit einem Code erzeugt.
Vorab sei gesagt, der Code ist nicht so schön wie greg seiner, aber es geht mir in erster Linie nicht darum ob der Code schön ist sondern darum, dass er funktioniert. Wenn ich den dann auch noch verstehe ist alles perfekt.
Ich habe keine großen Kommentationen vorgenommen, wer etwas nicht versteht, der möge fragen. Vielleicht verschieb ich diesen Code auch ins Tutorialforum und erläutere dort ein wenig die Funktionsweise.
Aber nun mal zum Script. Dieses Script ist eine normale Funktion die 3 Parameter benötigt. Was die 3 Parameter bezwecken bzw. wozu sie da sind steht ganz oben als Kommentar. Das Script ist so aufgebaut, dass es von alleine ausrechnet, ob die Anzahl der Zeichen in das Bild passen, werden also mehr Zeichen angegeben als das in das Bild passen, so wird das ganze Script abgebrochen. Eine entsprechende Fehlermeldung wird dann angezeigt.
Zurückgegeben wird ein Array welches 2 Werte beinhaltet. Einmal das Bild und ein mal den Code der auf dem Bild zu dargestellt wird. Diesen Code kann man dann in eine Session schreiben oder was auch immer.
Lange Rede kurzer Sinn, hier erstmal das Script.
Ich habe es mal hochgeladen um zu zeigen das es auch funzt. http://www.webhilfe.info/virus/image_code/image.php
Wer Verbesserungsvorschläge oder Anregungen hat der möge sich melden.
Vorab sei gesagt, der Code ist nicht so schön wie greg seiner, aber es geht mir in erster Linie nicht darum ob der Code schön ist sondern darum, dass er funktioniert. Wenn ich den dann auch noch verstehe ist alles perfekt.
Ich habe keine großen Kommentationen vorgenommen, wer etwas nicht versteht, der möge fragen. Vielleicht verschieb ich diesen Code auch ins Tutorialforum und erläutere dort ein wenig die Funktionsweise.
Aber nun mal zum Script. Dieses Script ist eine normale Funktion die 3 Parameter benötigt. Was die 3 Parameter bezwecken bzw. wozu sie da sind steht ganz oben als Kommentar. Das Script ist so aufgebaut, dass es von alleine ausrechnet, ob die Anzahl der Zeichen in das Bild passen, werden also mehr Zeichen angegeben als das in das Bild passen, so wird das ganze Script abgebrochen. Eine entsprechende Fehlermeldung wird dann angezeigt.
Zurückgegeben wird ein Array welches 2 Werte beinhaltet. Einmal das Bild und ein mal den Code der auf dem Bild zu dargestellt wird. Diesen Code kann man dann in eine Session schreiben oder was auch immer.
Lange Rede kurzer Sinn, hier erstmal das Script.
PHP-Code:
/*
########### image.php ############
# #
# Autor: Virus / Carsten #
# Email: virus@webhilfe.info #
# Datum: 05.03.2006 #
# #
# Funktion fügt einem vorgegeben #
# Bild einen Code hinzu. #
# #
##################################
==> $code_laenge --> Anzahl der Zeichen die angezeigt werden
==> $codierung --> Welche Zeichen sollen angezeigt werden
= 0 --> Anzeige von Buchstaben und Zahlen
= 1 --> Anzeige von Buchstaben
= 2 --> Anzeige von Zahlen
==> $image --> Bild auf dem der Code angezeigt wird (mit Ordnerangabe)
jpg und gif Bilder sind erlaubt
*/
$no_image = '<b>Fehlermeldung:</b> Beim öffnen des Bildes ist ein Fehler aufgetreten.<br><br><b>Ursache:</b> Das Bild existiert nicht!<br><br><b>Vorschlag für Fehlerbehebung:</b> korrekten Pfad angeben bzw. Bild hochladen';
$wrong_image = '<b>Fehlermeldung:</b> Bild kann nicht verwendet werden.<br><br><b>Ursache:</b> Das angegeben Bild ist kein .jpg bzw. .gif Bild.<br><br><b>Vorschlag für Fehlerbehebung:</b> Bild vom Typ .jpg bzw. vom Typ .gif angeben';
$wrong_image_size = '<b>Fehlermeldung:</b> Bild kann nicht verwendet werden.<br><br><b>Ursache:</b> Das bild ist höher als breit.<br><br><b>Vorschlag für Fehlerbehebung:</b> Bild angeben, welches breiter als hoch ist';
$wrong_code_laenge = '<b>Fehlermeldung:</b> Falsche Code-Länge angegeben.<br><br><b>Ursache:</b> Das Bild ist zu schmal bzw. es wurden zuviele Zeichen angegeben.<br><br><b>Vorschlag für Fehlerbehebung:</b> Bild verbreitern oder eine geringere Code-Länge angeben';
$image_create_false = '<b>Fehlermeldung:</b> Bild konnte nicht erzeugt werden.<br><br><b>Ursache:</b> Eventuell unterstützt der Server diese Funktion nicht oder die CHMOD Rechte sind falls.<br><br><b>Vorschlag für Fehlerbehebung:</b> GD-Bibliothek Version 1.6 muss mindestens vorhanden sein, CHMOD Rechte auf min. 644 stellen';
function image_code($code_laenge,$codierung,$image)
{
global $no_image;
global $wrong_image;
global $wrong_image_size;
global $wrong_code_laenge;
global $image_create_false;
$code = '';
$buchstaben = range('A', 'Z');
$ziffern = range(0, 9);
if(!file_exists($image))
die($no_image);
$image_daten = getimagesize($image);
if(($image_daten[2] != 1) and ($image_daten[2] != 2))
die($wrong_image);
if($image_daten[0] < $image_daten[1])
die($wrong_image_size);
$beschreib_flaeche = ($image_daten[0] - 10) / 10;
if($beschreib_flaeche < $code_laenge)
die($wrong_code_laenge);
if($image_daten[2] == 1) $bild = ImageCreateFromGIF($image);
if($image_daten[2] == 2) $bild = ImageCreateFromJPEG($image);
$erste_x_position = ($image_daten[0] - 5);
$bereiche = $code_laenge + 1;
for($i=1;$i<=$code_laenge;$i++)
{
srand((double)microtime()*10000000);
if($codierung == 0)
{
if(rand(0,1) == 0) $zeichen = $buchstaben[rand(0,25)];
else $zeichen = $ziffern[rand(0,9)];
}
elseif($codierung == 1) $zeichen = $buchstaben[rand(0,25)];
elseif($codierung == 2) $zeichen = $ziffern[rand(0,9)];
$code .= $zeichen;
$neue_x_position = (($image_daten[0] / $bereiche) * $i) - 5;
$neue_y_position = rand(5,$image_daten[1] - 20);
ImageString($bild,10,$neue_x_position,$neue_y_position,$zeichen,1);
}
if(Imagepng($bild,'images/bild.png'))
$status[0] = '<img src="images/bild.png" '.$image_daten[3].'>';
else
die($image_create_false);
ImageDestroy($bild);
$status[1] = $code;
return $status;
}
$image = image_code(6,0,'images/bild.jpg');
echo $image[0].'<br>'.$image[1];
Wer Verbesserungsvorschläge oder Anregungen hat der möge sich melden.
Ich sag nur global lol.