Hallo,
Uch habe ein Captchabild gemacht.
Jetzt wollte ich ein PNG-Bild vor die zufällige Hintergrundfarbe setzen, doch das bild ist fast komplett schwarz. captcha:
captcha.png:
Mein code:
woran liegt das?
lg 4udesigns
Uch habe ein Captchabild gemacht.
Jetzt wollte ich ein PNG-Bild vor die zufällige Hintergrundfarbe setzen, doch das bild ist fast komplett schwarz. captcha:
Mein code:
PHP:
//Bild anzeigen lassen
header("Content-Type: image/jpeg");
session_start();
$CAPTCHA_LENGTH = 5; // Länge der Captcha-Zeichenfolge, hier fünf Zeichen
$FONT_SIZE = 18; // Schriftgröße der Zeichen in Punkt
$IMG_WIDTH = 170; // Breite des Bild-Captchas in Pixel
$IMG_HEIGHT = 60; // Höhe des Bild-Captchas in Pixel
// Liste aller verwendeten Fonts
$FONTS[] = '/font/BRADHITCF';
$FONTS[] = '/font/TEMPSITCF';
$FONTS[] = '/font/JOKERMANF';
$FONTS[] = '/font/VINERITCF';
// Unser Zeichenalphabet
$ALPHABET = array('A', 'B', 'C', 'D', 'E', 'F', 'G',
'H', 'Q', 'J', 'K', 'L', 'M', 'N',
'P', 'R', 'S', 'T', 'U', 'V', 'Y',
'W', '2', '3', '4', '5', '6', '7');
// Wir teilen dem Browser mit, dass er es hier mit einem JPEG-Bild zu tun hat.
header('Content-Type: image/jpeg', true);
// Wir erzeugen ein leeres JPEG-Bild von der Breite IMG_WIDTH und Höhe IMG_HEIGHT
$img = imagecreatetruecolor($IMG_WIDTH, $IMG_HEIGHT);
// Wir definieren eine Farbe mit Zufallszahlen
// Die Farbwerte sind durchgehend und absichtlich hoch (200 - 256) gewählt,
// um eine "leichte" Farbe zu erhalten
$col = imagecolorallocate($img, rand(150, 180), rand(200, 210), rand(220, 245));
// Wir füllen das komplette Bild mit der zuvor definierten Farbe
imagefill($img, 0, 0, $col);
//Bilder in Variablen Laden
$Grafik = ImageCreateFromPNG("http://discreated.de/img/captcha.png");
//Bearbeitung
ImageCopy($Grafik, $Grafik,
imagesx($Grafik)-imagesx($Grafik),
imagesy($Grafik)-imagesy($Grafik), 0, 0,
imagesx($Grafik),
imagesy($Grafik));
$captcha = ''; // Enthält später den Captcha-Code als String
$x = 20; // x-Koordinate des ersten Zeichens, 10 px vom linken Rand
for($i = 0; $i < $CAPTCHA_LENGTH; $i++) {
$chr = $ALPHABET[rand(0, count($ALPHABET) - 1)]; // ein zufälliges Zeichen aus dem definierten Alphabet ermitteln
$captcha .= $chr; // Der Zeichenfolge $captcha das ermittelte Zeichen anfügen
$col = imagecolorallocate($img, rand(0, 255), rand(0, 150), rand(0, 10)); // einen zufälligen Farbwert definieren
$font = $FONTS[rand(0, count($FONTS) - 1)]; // einen zufälligen Font aus der Fontliste FONTS auswählen
$y = 30 + rand(2, 6); // die y-Koordinate mit einem Mindestabstand plus einem zufälligen Wert festlegen
$angle = rand(0, 20); // ein zufälliger Winkel zwischen 0 und 30 Grad
/*
* Diese Funktion zeichnet die Zeichenkette mit den
* gegeben Parametern (Schriftgröße, Winkel, Farbe, TTF-Font, usw.)
* in das Bild.
*/
imagettftext($img, $FONT_SIZE, $angle, $x, $y, $col, $font, $chr);
$dim = imagettfbbox($FONT_SIZE, $angle, $font, $chr); // ermittelt den Platzverbrauch des Zeichens
$x += $dim[4] + abs($dim[6]) + 10; // Versucht aus den zuvor ermittelten Werten einen geeigneten Zeichenabstand zu ermitteln
}
//Bilder ausgabe
imagepng($Grafik);
//Bild Speichern
imagepng($Grafik, "./captcha.jpeg");
$_SESSION["captcha"] = $captcha;
woran liegt das?
lg 4udesigns