Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di nourdine
    Registrato dal
    Nov 2005
    Messaggi
    1,130

    GD che usa i colori che vuole lei

    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" il nero e il giallino dello sfondo dell'immagine. HELP ME!

    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);

  2. #2
    probabilmente succede perchè l'immagine generata dalla funzione imagecreate() non produce immagini di tipo true color, che la funzione imagecolorallocate() si aspetta di ricevere in ingresso, come specificato dalla documentazione ufficiale.

    per risolvere, usa la funzione imagecreatetruecolor() al posto di imagecreate()

  3. #3
    Utente di HTML.it L'avatar di nourdine
    Registrato dal
    Nov 2005
    Messaggi
    1,130
    vecchio mi sa che hai ragione!

    thanks a lot 4 the advice
    cheerio!

  4. #4
    Utente di HTML.it L'avatar di nourdine
    Registrato dal
    Nov 2005
    Messaggi
    1,130
    senti ho provato. con la imagecreatetruecolor() mi crea un'immagine con sfondo nero e basta. come faccio a cambiare colore dello sfondo? e tutto il resto della grafica come mai non si vede?

  5. #5
    per impostare il colore di sfondo usa la funzione imagefill, invece per quanto riguarda il resto il problema è nell'istruzione $col = array_rand($colors);. array_rand non restituisce il valore dell'elemento (cioè il codice colore istanziato con imagecolorallocate), ma la sua chiave all'interno dell'array. una volta ottenuta una chiave casuale usando la funzione array_rand, devi estrarre dall'array il valore associato a quella chiave.

    modifica il codice in questo modo:

    Codice PHP:
    $col_key array_rand($colors);
    $col $colors[$col_key]; 

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.