Caos nell'uso dei colori con GD

qui sotto ho riportato uno script che uso per creare degli sfondi random per della captcha! Il problema č che per il testo e per i rettangoli (disegnati a caso) lo script mi adopera anche colori che, banchč istanziati correttamente, non appartengono agli array da cui pesca lo script per colorare questi elementi (testo e i rettangoli). Come mai? i colori usati a "sproposito" sono il nero e il giallino dello sfondo dell'immagine. HELP ME!  :tichedoff:

codice:

// imposto gli header

header("Content-type: image/png");

// istanzio una nuova immagine di dimensioni x=200 e y=300

$immagine = imageCreate(300, 180);

// assegno il primo colore, questo colore sarą anche lo sfondo dell'immagine

$sfondo = imageColorAllocate($immagine, 255, 255, 170);

// qui istanzio il nero

$black = imageColorAllocate($immagine, 0, 0, 0);

// salvo in un array altri colori da utilizzare per le immagini random che creeranno confusione (noise)

$blue = imageColorAllocate($immagine, 150, 150, 250);

$purple = imageColorAllocate($immagine, 190, 120, 190);

$green = imageColorAllocate($immagine, 110, 240, 110);

$orange = imageColorAllocate($immagine, 250, 160, 140);

$colors = array($blue, $purple, $green, $orange);

// rettangoli casuali e noise letterale

for ($n = 1; $n <= 10; $n++){

// parametri casuali ellisse

$x1 = rand(0, 300);

$y1 = rand(0, 180);

$x2 = rand(0, 300);

$y2 = rand(0, 180);

$col = array_rand($colors);

// parametri casuali parole noise

$x_noise = rand(0, 300);

$y_noise = rand(0, 180);

$angle_noise = rand(0, 360);

$size_noise = rand(20, 70);

// creo i rettangoli

imageFilledRectangle($immagine, $x1, $y1, $x2, $y2, $col);

// creo i le scritte confondenti

imagettftext($immagine, $size_noise, $angle_noise, $x_noise, $y_noise, $col, "font1.ttf", "noise");

}

// invio l'output come immagine PNG

imagePng($immagine);

// libero la memoria

imageDestroy($immagine);

inviato 10 anni fa
Enea Zenni
modificato 10 anni fa
X 0 X

Dopo un'attenta analisi ho trovato l'errore:

If you are picking only one entry, array_rand() returns the key for a random entry

per cui devi cambiare

$col = array_rand($colors);

in

$col = $colors[array_rand($colors)];

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda