Lid |
|
Beste,
ik ben OOP aan het leren (is een PHP vraag niet OOP) en heb een captcha gemaakt. Deze werkt prima echter de achtergrond beweegt! Soms staat hij te ver naar boven, erg raar. Kan iemand mij vertellen hoe dit kan komen? ik kom er zelf namelijk niet uit!
Een live voorbeeld vind je hier: http://bit.ly/1EDBJpM
Het kan zijn dat je een keer of 10 op verversen moet drukken voordat je het ziet, maar als de achtergrond verschoven is dan zie je dus een kleine tot soms wat dikkere zwarte balk. Hopelijk dat iemand mij kan vertellen hoe ik dit kan oplossen.
Mijn code:
<?PHP
class Captcha {
public $image;
public $code;
public $width;
public $height;
public $fonts;
// constructor
public function __construct($width = 300, $height = 60) {
$this->width = $width;
$this->height = $height;
$aFonts = realpath('.').'/AGENCYB.TTF';
// generate randomly 4-5 characters
$string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
$string = str_shuffle($string);
$length = rand(4,5);
$this->code = substr($string, 0, $length);
$aCode = str_split ($this->code);
$background = array('background1.png', 'background2.png', 'background3.png');
//$this->image = imagecreatetruecolor($this->width, $this->height);
$this->image = imagecreatefrompng($background[rand(0, 2)]);
// Create each letter on a random(ish) position and angle
for($i = 0; $i < count ($aCode); $i++)
{
$fontcolor = imagecolorallocate($this->image, 000, 000, 000);
if(count($aCode) == 4)
{
$pos[0] = rand (15, 55);
$pos[1] = rand (80, 120);
$pos[2] = rand (145, 185);
$pos[3] = rand (210, 250);
}
if(count($aCode) == 5)
{
$pos[0] = rand (10, 45);
$pos[1] = rand (65, 100);
$pos[2] = rand (120, 155);
$pos[3] = rand (175, 210);
$pos[4] = rand (230, 265);
}
imagettftext($this->image, rand(14, 18), rand(-30, 30), $pos[$i], rand(50, 20), $fontcolor, $aFonts, $aCode[$i]);
}
}
// functions
public function ParseCode(){
return $this->code;
}
public function SaveImage(){
imagepng($this->image, 'captcha.png');
}
public function DisplayImage(){
return '<img src="captcha.png?'.time().'" alt="Captcha image" />';
}
// destructor
public function __destruct() {
imagedestroy($this->image);
}
}
?>
<?PHP class Captcha { public $image; public $code; public $width; public $height; public $fonts; // constructor public function __construct($width = 300, $height = 60) { $this->width = $width; $this->height = $height; // generate randomly 4-5 characters $string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; $this->code = substr($string, 0, $length); $aCode = str_split ($this->code); $background = array('background1.png', 'background2.png', 'background3.png'); //$this->image = imagecreatetruecolor($this->width, $this->height); $this->image = imagecreatefrompng ($background[rand(0, 2)]); // Create each letter on a random(ish) position and angle for($i = 0; $i < count ($aCode); $i++) { $fontcolor = imagecolorallocate($this->image, 000, 000, 000); { $pos[1] = rand (80, 120); $pos[2] = rand (145, 185); $pos[3] = rand (210, 250); } { $pos[1] = rand (65, 100); $pos[2] = rand (120, 155); $pos[3] = rand (175, 210); $pos[4] = rand (230, 265); } imagettftext ($this->image, rand(14, 18), rand(-30, 30), $pos[$i], rand(50, 20), $fontcolor, $aFonts, $aCode[$i]); } } // functions public function ParseCode(){ return $this->code; } public function SaveImage(){ imagepng($this->image, 'captcha.png'); } public function DisplayImage(){ return '<img src="captcha.png?'.time().'" alt="Captcha image" />'; } // destructor public function __destruct() { imagedestroy($this->image); } } ?>
Mijn aanroep code:
<?php
require_once('captcha.php');
$captcha = new Captcha(300, 60);
$captcha->SaveImage();
echo $captcha->DisplayImage();
?>
<?php require_once('captcha.php'); $captcha = new Captcha(300, 60); $captcha->SaveImage(); echo $captcha->DisplayImage(); ?>
|