PDA

View Full Version : [PHP] Creazione immagine captcha


Alhazred
22-01-2011, 10:49
Premetto che so come funzionano i captcha, l'ho già fatto in passato.
Il problema è che fino ad ora ho sempre usato creare un'immagine con sfondo colorato, sopra lo sfondo il codice e sopra il codice alcune linee.
Ora vorrei cambiare tipo di visualizzazione ed usare qualcosa di simile a questo:
http://img88.imageshack.us/img88/7324/snapil.jpg

Sulle librerie GD però mi pare di non trovare nulla di adatto.
Come faccio a far generare automaticamente una cosa del genere?

trickui
22-01-2011, 12:47
Ne trovi centinaia di tutorial che uasano GD, come questi
http://www.codewalkers.com/c/a/Miscellaneous/Creating-a-CAPTCHA-with-PHP/

http://fossaweb.net/103/php/come-creare-un-semplice-captcha-con-php/

http://www.w3facile.com/php/verifica-antispam-captcha-php-tutorial.html

Ciao:)

Alhazred
22-01-2011, 19:28
Come detto nel primo post, sono capace di creare un captcha, sto cercando di capire come creare un'immagine con l'effetto di quella postata.
I tutorial proposti creano l'immagine come la so già fare.

SerMagnus
22-01-2011, 19:33
interessa anche a me.

cmq in genere quel tipo di manipolazioni sulle immagini si fa con le matrici...

Alhazred
22-01-2011, 23:38
Mi sono scaricato aicontactsafe, è un componente per Joomla, ho spulciato il codice, ho trovato dove crea le immagini per i captcha, l'ho convertito in codice PHP "non-joomla" ed ho ottenuto un buon risultato.

Ecco come ho modificato il codice che gestisce la creazione delle immagini:


header("Content-type: image/png");
$font = "courbi.ttf";

$scale = 2;
$width = 200;
$height = 60;
$xperiod = 10;
$xamplitude = 5;
$yperiod = 12;
$yamplitude = 14;

$codice ="AK7S52";

$image = imagecreate($width,$height);

$background_color = ImageColorAllocate($image, rand(0,120), rand(0,120), rand(0,120));

$colour1 = ImageColorAllocate($image, rand(120,255), rand(120,255), rand(120,255));

imagettftext($image,26,0,30,40,$colour1,$font,$codice);
imagefilter($image,IMG_FILTER_GAUSSIAN_BLUR);

// X-axis wave generation
$xp = $scale*$xperiod*rand(1,3);
$k = rand(0, 100);
for ($i = 0; $i < ($width*$scale); $i++) {
imagecopy($image, $image,
$i-1, sin($k+$i/$xp) * ($scale*$xamplitude),
$i, 0, 1, $height*$scale);
}

// Y-axis wave generation
$k = rand(0, 100);
$yp = $scale*$yperiod*rand(1,2);
for ($i = 0; $i < ($height*$scale); $i++) {
imagecopy($image, $image,
sin($k+$i/$yp) * ($scale*$yamplitude), $i-1,
0, $i, $width*$scale, 1);
}
imagepng($image);
imagedestroy($image);

Qui il codice è fisso, ma puoi generarlo come vuoi.
Spero possa esserti utile :)

trickui
23-01-2011, 11:34
Come detto nel primo post, sono capace di creare un captcha, sto cercando di capire come creare un'immagine con l'effetto di quella postata.
I tutorial proposti creano l'immagine come la so già fare.
ah ok non avevo capito...
Sorry :)