Captcha Tutorial - Störelemente
Autor
Flitze
Klicks 71676
Keywords:
Captchas mit PHP erstellen, Captcha Spamschutz, Captcha Tutorial Image-Funktionen, PHP Captcha-Klasse, Captchas einbinden, Turorial intelligente Captchas, Captcha Beispiel, Captcha, Störelemente, Kreis, Linie, Stern, Sterne erstellen, Kreise erstellen, Rechtecke erstellen, Dreiecke erstellen, Störlinien erstellen,
Klicks 71676
Rating für Captcha Tutorial
6.4 von 10
Bewertungen41
Stand
20.06.2010
6.4 von 10
Bewertungen41
Keywords:
Captchas mit PHP erstellen, Captcha Spamschutz, Captcha Tutorial Image-Funktionen, PHP Captcha-Klasse, Captchas einbinden, Turorial intelligente Captchas, Captcha Beispiel, Captcha, Störelemente, Kreis, Linie, Stern, Sterne erstellen, Kreise erstellen, Rechtecke erstellen, Dreiecke erstellen, Störlinien erstellen,
Breadcrumb:
Tutorials » Captcha Tutorial » Captcha Tutorial - Störelemente
3. Störelemente (Kreis, Stern, Rechteck, Dreieck)
[ADSENSE_LINE]Durch die kombinierte Verwendung von Text und Rechenaufgabe wird es schon schwieriger, das Captcha zu entziffern. Außer Text können aber auch noch weitere Störelemente erzeugt werden. Dazu müssen erstmal neue Attribute erzeugt werden.PHP:
<?php
var $elementcolor;
var $elementnumber;
var $elementsize;
?>
Außerdem brauche ich Methoden zum Setzen und Kontrollieren dieser Attribute.
PHP:
<?php
// setzt die Attribute für die Störelemente
function setElementAttributes ($r, $g, $b, $n, $size){
// Elementfarbe
if(!$this->checkColorValue($r,$g,$b)){
$this->errors[] = "Falscher Farbwert (Störelementfarbe)!";
return false;
}
// Anzahl
if(!is_Int($n)){
$this->errors[] = "Falscher Zahlwert (Störelementanzahl)!";
return false;
}
// Größe
if(!is_Int($size)){
$this->errors[] = "Falscher Zahlwert (Störelementgröße)!";
return false;
}
$this->elementcolor = imagecolorallocate($this->bild,(int)$r,(int)$g,(int)$b);
$this->elementnumber = (int)$n;
$this->elementsize = (int)$size;
}
// prüft, ob die Elementattribute gesetzt wurden
function checkElementAttributes(){
if(!is_Int($this->elementnumber)){
$this->errors[] = "Störelemente sind nicht initialisiert!";
return false;
}
if(!is_Int($this->elementcolor)){
$this->errors[] = "Elementfarbe ist nicht initialisiert!";
return false;
}
if(!is_Int($this->elementsize)){
$this->errors[] = "Elementgröße ist nicht initialisiert!";
return false;
}
return true;
}
?>
Nun können wir uns der Erzeugung der eigentlichen Elemente zuwenden. Ich fange mal mit Störlinien an.
Störlinien
PHP:
<?php
// erstellt Störlinien
function createLines(){
// Elementattribute prüfen
if(!$this->checkElementAttributes())
return false;
// je größer $this->elementnumber desto mehr Linien
for($i=0; $i<$this->elementnumber; $i++){
$x_start = rand(0,$this->width);
$x_end = rand(0,$this->width);
// je größer $this->elementsize desto dicker die Linie
for($j=0; $j<$this->elementsize; $j++){
$x_start++;
$x_end++;
// Linie vom oberen zum unteren Rand einfügen
imageline($this->bild, $x_start, 0, $x_end, $this->height, $this->elementcolor);
}
}
}
?>
Beispiele
PHP:
<?php
// Einfarbige Störlinien
$myCaptcha = new Captcha(200,100);
$myCaptcha->setBGColor(255,0,0);
$myCaptcha->setElementAttributes(50,50,50,10,5);
$myCaptcha->createLines();
$myCaptcha->setFontColor(20,20,20);
$myCaptcha->createText('123456');
$myCaptcha->setFontColor(0,0,0);
$myCaptcha->createArithmetic(9);
$myCaptcha->createCaptcha();
// Mehrfarbige Störlinien
$myCaptcha = new Captcha(200,100);
$myCaptcha->setBGColor(255,0,0);
for($i=0; $i<10; $i++){
$r = rand(0,255);
$g = rand(0,255);
$b = rand(0,255);
$myCaptcha->setElementAttributes($r,$g,$b,1,5);
$myCaptcha->createLines();
}
$myCaptcha->setFontColor(20,20,20);
$myCaptcha->createText('123456');
$myCaptcha->setFontColor(0,0,0);
$myCaptcha->createArithmetic(9);
$myCaptcha->createCaptcha();
?>
Kreise
PHP:
<?php
function createCircles(){
if(!$this->checkElementAttributes())
return false;
for($i=0; $i<$this->elementnumber; $i++){
$x = rand(0,$this->width);
$y = rand(0,$this->height);
imagefilledellipse($this->bild, $x, $y, $this->elementsize, $this->elementsize, $this->elementcolor);
}
}
?>
Rechtecke
PHP:
<?php
function createRectangles(){
if(!$this->checkElementAttributes())
return false;
for($i=0; $i<$this->elementnumber; $i++){
$x = rand(0,$this->width);
$y = rand(0,$this->height);
imagefilledrectangle($this->bild, $x, $y, $x+$this->elementsize, $y+$this->elementsize, $this->elementcolor);
}
}
?>
Sterne
PHP:
<?php
function createStars(){
if(!$this->checkElementAttributes())
return false;
$spikes = 5;
for($i=0; $i<$this->elementnumber; $i++){
$x = rand(0,$this->width);
$y = rand(0,$this->height);
$values = drawStar($x, $y, $this->elementsize, $spikes);
imagefilledpolygon($this->bild, $values, $spikes*2, $this->elementcolor);
}
}
?>
Zum Erzeugen von Sternen mittels PHP habe ich eine eigene Funktion entwickelt, auf die ich hier zurückgreife. Dieses Funktion nennt sich drawStar() und ist im Tutorial zum Erstellen von Sternen mittels PHP erklärt.
Dreiecke
PHP:
<?php
function createTriangle(){
if(!$this->checkElementAttributes())
return false;
$spikes = 3;
for($i=0; $i<$this->elementnumber; $i++){
$x = rand(0,$this->width);
$y = rand(0,$this->height);
$values = drawStar($x, $y, $this->elementsize, $spikes);
imagefilledpolygon($this->bild, $values, $spikes*2, $this->elementcolor);
}
}
?>
Beispielaufruf in bunt
PHP:
<?php
$myCaptcha = new Captcha(200,100);
$myCaptcha->setBGColor(255,0,0);
for($i=0; $i<10; $i++){
$r = rand(0,255);
$g = rand(0,255);
$b = rand(0,255);
$myCaptcha->setElementAttributes($r,$g,$b,1,5);
$myCaptcha->createLines();
}
for($i=0; $i<3; $i++){
$r = rand(0,255);
$g = rand(0,255);
$b = rand(0,255);
$myCaptcha->setElementAttributes($r,$g,$b,1,rand(10,30));
$myCaptcha->createCircles();
}
for($i=0; $i<3; $i++){
$r = rand(0,255);
$g = rand(0,255);
$b = rand(0,255);
$myCaptcha->setElementAttributes($r,$g,$b,1,rand(10,30));
$myCaptcha->createStars();
}
for($i=0; $i<3; $i++){
$r = rand(0,255);
$g = rand(0,255);
$b = rand(0,255);
$myCaptcha->setElementAttributes($r,$g,$b,1,rand(10,30));
$myCaptcha->createRectangles();
}
for($i=0; $i<3; $i++){
$r = rand(0,255);
$g = rand(0,255);
$b = rand(0,255);
$myCaptcha->setElementAttributes($r,$g,$b,1,rand(10,30));
$myCaptcha->createTriangle();
}
$myCaptcha->setFontColor(20,20,20);
$myCaptcha->createText('123456');
$myCaptcha->setFontColor(0,0,0);
$myCaptcha->createArithmetic(9);
$myCaptcha->createCaptcha();
?>
Beispielaufruf mit einer Farbe pro Elementgattung
PHP:
<?php
$myCaptcha = new Captcha(200,100);
$myCaptcha->setBGColor(255,0,0);
$myCaptcha->setElementAttributes(255,255,0,10,5);
$myCaptcha->createLines();
$myCaptcha->setElementAttributes(0,0,255,3,rand(10,30));
$myCaptcha->createCircles();
$myCaptcha->setElementAttributes(0,255,0,3,rand(10,30));
$myCaptcha->createStars();
$myCaptcha->setElementAttributes(0,255,255,3,rand(10,30));
$myCaptcha->createRectangles();
$myCaptcha->setElementAttributes(255,0,255,3,rand(10,30));
$myCaptcha->createTriangle();
$myCaptcha->setFontColor(20,20,20);
$myCaptcha->createText('123456');
$myCaptcha->setFontColor(0,0,0);
$myCaptcha->createArithmetic(9);
$myCaptcha->createCaptcha();
?>
Beispielaufruf einfarbig
PHP:
<?php
$myCaptcha = new Captcha(200,100);
$myCaptcha->setBGColor(255,0,0);
$r = 50;
$g = 50;
$b = 50;
$myCaptcha->setElementAttributes($r,$g,$b,10,5);
$myCaptcha->createLines();
$myCaptcha->setElementAttributes($r,$g,$b,3,rand(10,30));
$myCaptcha->createCircles();
$myCaptcha->createStars();
$myCaptcha->createRectangles();
$myCaptcha->createTriangle();
$myCaptcha->setFontColor(20,20,20);
$myCaptcha->createText('123456');
$myCaptcha->setFontColor(0,0,0);
$myCaptcha->createArithmetic(9);
$myCaptcha->createCaptcha();
?>
So nun haben wir einige Möglichkeiten um uns ein hübsches Captcha zu basteln.
Zurück zur vorigen Seite:
Captcha Tutorial - Logische Abfragen Weiter zur nächsten Seite:
Captcha Tutorial - Einbindung