Captcha php

  • Creatore Discussione Creatore Discussione Cosina
  • Data di inizio Data di inizio

Cosina

Utente Attivo
27 Dic 2016
101
0
16
Ciao a tutti. Ho un form con captcha php. Funziona benissimo, ma vorrei ingrandire un po' i numeri e non so come fare, potete aiutarmi?
Il codice php è questo:
PHP:
<?php

session_start();

$image = imagecreatetruecolor(120, 30);
$background = imagecolorallocate($image, 200, 200, 200);
imagefill($image, 0, 0, $background);

$linesColor = imagecolorallocate($image, 100, 100, 100);
for ($i=1; $i<=5; $i++) {
   imagesetthickness($image, rand(1,2));
   imageline($image, 0, rand(0,30), 120, rand(0,30), $linesColor);
}

$captcha = '';
$textColor = imagecolorallocate($image, 0, 0, 0);
for ($x = 15; $x <= 95; $x += 20) {
    $value = rand(0, 9);
    imagechar($image, rand(3, 5), $x, rand(2, 14), $value, $textColor);

    $captcha .= $value;
}

$_SESSION['captcha'] = $captcha;

header('Content-type: image/png');
imagepng($image);
imagedestroy($image);
?>

Grazie per l'attenzione.
 
Ciao, purtroppo imagechar non permette di impostare una dimensione del testo. Si può certamente risolvere in diversi modi ma penso sia più pratico usare imagettftext come alternativa alla suddetta funzione.
Questa funzione ti permette di impostare una dimensione del testo ma dovrai anche specificare un font (che potrebbe anche essere un vantaggio).
Volendo puoi inserire un font personalizzato. Dovrai prima caricarlo sul server e quindi specificarne il percorso nel relativo parametro di tale funzione.

Puoi usare un carattere che sia sufficientemente distorto ma decifrabile umanamente.

Io ho scaricato questo: https://www.1001fonts.com/the-shaker-font.html
quindi ho creato una cartella fonts dentro la cartella dove sta lo script e ci ho messo dentro quel ttf.

Ho modificato lo script in questo modo:
PHP:
<?php
session_start();

$image = imagecreatetruecolor(120, 30);
$background = imagecolorallocate($image, 200, 200, 200);
imagefill($image, 0, 0, $background);

$font = "/fonts/the-shaker.caps.ttf";
$captcha = '';
for ($i = 0; $i < 5; $i++) {
  $value = rand(0, 9);
  $size = rand(16, 22);
  $angle = rand(-10, 10);
  $x = rand(13, 17) + $i * 20;
  $y = rand(25, 30);
  $color = imagecolorallocate($image, rand(0, 128), rand(0, 128), rand(0, 128));

  imagesetthickness($image, rand(1,2));
  imageline($image, 0, rand(0,30), 120, rand(0,30), $color);

  imagettftext($image, $size, $angle, $x, $y, $color, $font, $value);

  $captcha .= $value;
}

$_SESSION['captcha'] = $captcha;

header('Content-type: image/png');
imagepng($image);
imagedestroy($image);
?>
Per $font dovrai quindi specificare il percorso del ttf.

Ho inoltre definito delle variabili dentro il ciclo cosi è più intuitivo capire come puoi eventualmente aggiustare i valori per la funzione che crea il testo. E' possibile infatti applicare una rotazione random, oltre alla posizione x e y.
Anche il colore è random per ciascun carattere.
Inoltre ho inserito, sempre nello stesso ciclo, la parte che crea le linee di disturbo in modo da impostare anche per queste lo stesso colore random così che risultino maggiormente amalgamate col testo.

Chiaramente puoi decidere di usare un diverso font, caricandolo e impostandolo opportunamente per ottenere un risultato che possa andare bene.

Fai qualche prova e fai sapere.
Buon proseguimento.
 

Discussioni simili