• User

    Inserimento testo in un immagine

    Ciao a tutti!
    Comincio nel dare gli auguri a probid, risolutore di miei molti problemi e quesiti, che finalmente è diventato moderatore ^^.

    Detto ciò... chiedo l'ennesimo aiuto a questa comunità.
    Tempo fa seppi che il php è capace di inserire attraverso sistemi di più variabili, testi e immagini scelti dall'utente. Ho cercato dunque un po' nel web, trovando solo demo però. Ad esempio... su un file GIF è possibile, inputizzando un testo, inserirlo in una zona ben determinata, con coordinate/colore/spessore/bordo/colore-bordo/etc. tutti inputizzabili.
    Vorrei sapere... quale funzione mi permette di elaborare questo ben di Dio di creazione? Cioè... inserendo in una apposita form $testo $coordinata_x $coordinata_y, quale funzione elabora ciò in una scritta?

    Thx a lot!


  • Super User

    Ciao marbar88 e bentornato,
    @MarBar88M said:

    Ciao a tutti!
    Comincio nel dare gli auguri a probid, risolutore di miei molti problemi e quesiti, che finalmente è diventato moderatore ^^.

    :):)

    Le librerie php alle quali ti riferisci sono le GD.
    Le funzioni sono:
    imagecreatortruecolor: http://it.php.net/imagecreatetruecolor che serve per creare l'immagine di base e ha due parametri,il primo è la lunghezza,il secondo l'altezza dell'immagine:[php]
    $im=imagecreatetruecolor(lunghezza, altezza);[/php]imagecolorallocate: http://it.php.net/imagecolorallocate
    serve per definire i colori del testo e dei caratteri:
    [php]
    $textcolor = imagecolorallocate($im, 255, 0, 0);[/php]$im e la variabile corrispondente alla funzione imagetruecolor;

    Imagestring scrive una stringa sull'immagine:
    [php]imagestring($im, 5, 10, 8, "STRINGA DA SCRIVERE", $textcolor);
    [/php]dove $im e la variabile corrispondente alla funzione imagetruecolor e $textcolor corrisponde alla funzione imagecolorallocate.
    5 è la grandezza del font
    10 è lo spazio da lasciare dal bordo sinistro
    8 è lo spazio da lasciare dal bordo alto
    Alla fine occorre usare
    [php]header("Content-type: image/jpeg");
    imagejpeg($im);[/php]per mostrare l'immagine finale.
    In caso di necessità siamo qui,ciao! 😉


  • User

    Allora... vediamo se ho capito!

    La funzione imagecreatetruecolor mi restituisce i parametri di grandezza di una immagine che voglio creare, ma allo stesso tempo, se io posseggo già un'immagine sulla quale voglio porre una stringa scrivo:

     
    $im = imagecreatetruecolor(immagine.gif');
    
    

    Ma ancora non capisco perché riutilizzo la stessa funzione per definire i parametri del testo che inserirò nell'immagine, e d'altronde la stessa variabile $im che contiene in effetti un'immagine...
    Cioè... la variabile:

    $textcolor = imagecolorallocate($im, 255, 0, 0); 
    
    

    si rifà alla variabile precendente, che in realtà è l'immagine di base (sia che definisca solo dimensioni sia che definisca una vera e propria immagine).

    In secondo luogo, se non chiedo troppo, non è possibile poi definire presenza/assenza di bordi e relativo colore e il tipo di font?

    Eternamente grazie.


  • Super User

    Con imagecreatetruecolor() non mi sembra si possano utilizzare immagini già esistenti,per quello esistono imagecreatefromjpeg(),imagecreatefromgif ecc... che si usano così:
    [php] $ima = imagecreatefromjpeg("immagine1.jpg");[/php]In imagecolorallocate() viene ripresa la funzione di creazione dell'immagine appunto per indicare SU QUALE immagine si vuole scrivere.

    Se vuoi cambiare il font sostituisci imagestring() con imagettftext() che si usa in questo modo:
    [php]
    imagettftext($im, grandezza, angolo, spazio da sx, spazio dall'alto, colore del testo, font del testo, stringa);[/php]Per i bordi si usa:
    imagerectangle($im,x1,y1,x2,y2,colore linea).
    Il colore della linea va definito con la funzione imagecolorallocate().
    esempio:
    $white = imagecolorallocate($imres, 255, 255, 255);
    imagerectangle($im,0,0,10,18,$white). 😉
    Ciao!


  • User

    Perfetto!!! Funge tutto... solo una cosa e non scasso più...
    Mi servirebbe definire per il testo alcune cose come:
    grassetto, corsivo, sottolineato, bordo e colore bordo. E' possibile?


  • Super User

    Non credo sia possibile,puoi farlo soltanto creando tu il font che vuoi utilizzare. 😉
    ciao!


  • User

    Ti ringrazio infinitamente! Sei stato di immenso aiuto!

    probid rulez! 😛


  • Super User

    😄
    Di niente,a presto! 😉


  • User

    Uhm... rispolvero un po' questa discussione senza aprire un nuovo topic 😛 .
    Si è verificata una cosa alquanto strana, o magari per questo tipo di codice normalissima.
    Il mio obiettivo era quello di creare delle custom immagini che gli utenti potevano tranquillamente salvare sul proprio PC e magari ficcarsele nella propria firma o altrove. Quando si tenta di salvarla con nome però... salva l'immagine base, quella caricata per scriverci sopra.
    Magari ho pensato al fatto che l'immagine è in sospensione, cioè non ha supporto se non l'immagine base, e dunque ho pensato si dovesse salvare da qualche parte, ma...:x non ho idea che possa aiutarmi. 😛

    [php]
    <?php
    if($r>255 or $b>255 or $g>255){
    die("Hai inserito valori di colore maggiori di 255");
    }

    $im = imagecreatefromgif(immagine.gif');
    $textcolor = imagecolorallocate($im, $r, $g, $b);

    imagettftext($im, $dimensione_font, 0, $x, $y, $textcolor, $font, $text);
    header("Content-type: image/gif");
    imagegif($im);
    ?>
    [/php]