Originalmente inviato da
sevenjeak
Cosa indenti, forse mi è sfuggito qualcosa?
no... intendo che secondo me lo script é semplice...
no... intendo che secondo me lo script é semplice...
Codice PHP:
session_start();
define("Niente", 0);
define("facile", 30);
define("medio", 50);
define("difficile", 80);
define("super_difficile", 100);
define("punto", 1);
define("linea", 2);
session_start(); avvia una nuova sessione
Codice PHP:
define("Niente", 0);
define("facile", 30);
define("medio", 50);
define("difficile", 80);
define("super_difficile", 100);
definisci le varie modalitá
Codice PHP:
/* dimensioni */
$x = 200; //larghezza
$y = 80; //altezza
$image = imagecreatetruecolor($x, $y); //creo l'immagine
ci sono i commenti
$color = array();
Codice PHP:
$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);
definisco un array di colori
Codice PHP:
$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";
definisco un array di font
Codice PHP:
$black = imagecolorallocate($image, 0, 0, 0);
imagefill($image, 0, 0, $black);
add_noise($image, facile, punto, $x, $y); //aggiungo il disturbo
"spiego" che $black equivale a nero e aggiungo il disturbo (le linee)
Codice PHP:
$_SESSION['CAPTCHA'] = strtolower(getString()); //genero la nuova stringa
definisco la sessione
Codice PHP:
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
);
}
qui ho spiegato tutto nei commenti
Codice PHP:
header("Content-type: image/png");
imagepng($image);
imagedestroy($image);
definisco che il contenuto della pagina é una png, creo l'immagine
Codice PHP:
function getString() {
$str = base64_encode(time());
$str = str_replace("=", "", $str); //elimino gli =
$str = str_shuffle($str);
return substr($str, 0, 6);
}
elimino gli =
Codice PHP:
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
é spiegato nei commenti
Codice PHP:
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;
}
}
}
questo é di facile comprensione