Codice PHP:
<?php
session_start();
define("NONE", 0);
define("EASY", 30);
define("MEDIUM", 50);
define("HARD", 80);
define("VERY_HARD", 100);
define("POINT", 1);
define("LINE", 2);
/* dimensioni */
$x = 215; //larghezza
$y = 80; //altezza
$image = imagecreatetruecolor($x, $y); //creo l'immagine
$color = array();
$color[] = imagecolorallocate($image, 255, 0, 0);
$color[] = imagecolorallocate($image, 0, 255, 0);
$color[] = imagecolorallocate($image, 0, 0, 255);
$color[] = imagecolorallocate($image, 255, 255, 0);
$color[] = imagecolorallocate($image, 255, 0, 255);
$color[] = imagecolorallocate($image, 255, 255, 255);
$color[] = imagecolorallocate($image, 0, 255, 255);
$font = array();
$font[] = "font/arial.ttf";
$font[] = "font/abbeyroad_regular.ttf";
$font[] = "font/roman_sd_regular.ttf";
$font[] = "font/elephants_in_cherry_trees_normal.ttf";
$black = imagecolorallocate($image, 0, 0, 0);
imagefill($image, 0, 0, $black);
add_noise($image, EASY, LINE, $x, $y); //aggiungo il disturbo
$_SESSION['CAPTCHA'] = strtolower(getString()); //genero la nuova stringa
for($i = 0;$i < strlen($_SESSION['CAPTCHA']); $i++) {
/* per ogni lettera applico impostazioni diverse (dimensione, angolo, colore, font) */
imagettftext(
$image, //immagine
20 + rand(0, 6), //dimensione carattere
rand(-35, 35), //angolo di rotazione
($i+1)*26, //offset sulla x
45+ rand(0, 4), //offset sulla y
$color[rand(0, count($color)-1)], //colore
$font[rand(0, count($font)-1)], //carattere
$_SESSION['CAPTCHA'][$i] //lettera da stampare
);
}
header("Content-type: image/png");
imagepng($image);
imagedestroy($image);
function getString() {
$str = base64_encode(time());
$str = str_replace("=", "", $str); //elimino gli =
$str = str_shuffle($str);
return substr($str, 0, 6);
}
function add_noise($image, $difficoult, $figure, $x, $y) {
if($figure == 1)
$difficoult *= 15; //i punti devono essere più delle linee per generare un disturbo significativo
for($i = 0; $i < $difficoult; $i++) {
$color = imagecolorallocate($image, rand(0,255), rand(0,255), rand(0,255));
$p = rand(0, 10);
$x1 = rand($p, rand($x - $p, $x-1));
$x2 = rand($p, rand($x - $p, $x-1));
$y1 = rand($p, rand($y - $p, $y-1));
$y2 = rand($p, rand($y - $p, $y-1));
switch($figure) {
case 1:
imageline($image, $x1, $y1, $x1, $y1, $color);
break;
default:
imageline($image, $x1, $y1, $x2, $y2, $color);
break;
}
}
}
?>
Il captcha ha lo sfondo nero ed delle linee che creano il disturbo, mentre io vorrei un captcha adatto per lo stile del mio sito, chi sarebbe cosi gentile da spiegarmi come faccio a cambiare lo sfondo da nero a bianco, togliere il disturbo delle linee e cambiare ilcolore dei caratteri.