//
// php modul gd ist dafuer notwendig
// ---------------------------------
$_SESSIONNAME = 'captcha'; // Sessionname
$font = './fnt/captcha.ttf'; // TTF Schriftart für Captcha
//$image = imagecreate(150, 400); // Bild erstellen mit 150 Pixel Breite und 30 Pixel Höhe
//imagecolorallocate($image, 255, 255, 255); // Bild weis färben, RGB
$imgname='./img/captcha-clock.png';
$image = ImageCreateFromPNG($imgname); //Backgroundimage
//print "
".$imgname." ".$font."
";
if(!$image)
{
/* Create a blank image */
$image = imagecreatetruecolor(150, 30);
$bgc = imagecolorallocate($image, 200, 255, 255);
$tc = imagecolorallocate($image, 0, 0, 0);
imagefilledrectangle($image, 0, 0, 150, 30, $bgc);
/* Output an error message */
imagestring($image, 1, 5, 5, 'Error loading ' . $imgname, $tc);
}
$left = 5; // Initialwert, von links 5 Pixel
$signs = 'aAbBcCdDeEfFgGhHjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ023456789#?';
// Alle Buchstaben und Zahlen
$string = ''; // Der später per Zufall generierte Code
for($i = 1;$i <= 5;$i++) // 5 Zeichen
{
$sign = $signs{rand(0, strlen($signs) - 1)};
/*
Zufälliges Zeichen aus den oben aufgelisteten
strlen($signs) = Zählen aller Zeichen
rand = Zufällig zwischen 0 und der Länge der Zeichen - 1
Grund für diese Rechnung:
Mit den Geschweiften Klammern kann man auf ein Zeichen zugreifen
allerdings fängt man dort genauso wie im Array mit 0 an zu zählen
*/
// Das Zeichen an den gesamten Code anhängen
$string .= $sign;
// Das gerade herausgesuchte Zeichen dem Bild hinzufügen
/*
imagettftext($image, 20, rand(-10, 10), $left + (($i == 1?15:15) * $i), 25, imagecolorallocate($image, 200, 200, 200), $font, $sign);
// Das Zeichen noch einmal hinzufügen, damit es für einen Bot nicht zu leicht lesbar ist
imagettftext($image, 16, rand(-15, 15), $left + (($i == 1?15:15) * $i), 25, imagecolorallocate($image, 69, 103, 137), $font, $sign);
*/
}
$farbe_b = ImageColorAllocate ($image, 0, 0, 0);
ImageTTFText ($image, 32, -30, 140, 70, $farbe_b, $font, $string[0]);
ImageTTFText ($image, 32, -90, 180, 130, $farbe_b, $font, $string[1]);
ImageTTFText ($image, 32, 0, 130, 210, $farbe_b, $font, $string[2]);
ImageTTFText ($image, 32, 45, 80, 190, $farbe_b, $font, $string[3]);
ImageTTFText ($image, 32, 99, 80, 120, $farbe_b, $font, $string[4]);
$_SESSION[$_SESSIONNAME] = $string; // Den Code in die Session mit dem Sessionname speichern für die Überprüfung
header("Content-type: image/png"); // Header für ein PNG Bild setzen
imagepng($image); // Ausgaben des Bildes
imagedestroy($image); // Bild zerstören
?>