Rendering di testo e forme sulle immagini in PHP

Nell'articolo precedente, ci siamo concentrati su immagini caricate e manipolanti con PHP. Abbiamo imparato come ruotare, ridimensionare, ridimensionare o capovolgere un'immagine. Abbiamo anche imparato a conoscere diversi filtri e la matrice di convoluzione. Questi tutorial riguardavano anche alcuni usi pratici della libreria GD come il ridimensionamento di tutte le immagini in una directory o l'aggiunta di filigrane su più immagini contemporaneamente.

Oltre a usare GD per manipolare immagini normali, possiamo anche crearne di nostre da zero. È possibile utilizzare diverse funzioni nella libreria per disegnare forme di base come ellissi, cerchi, rettangoli, poligoni e linee semplici. Con un po 'di matematica, queste forme possono creare bei modelli. Ci sono anche funzioni disponibili per disegnare del testo sull'immagine renderizzata, che apre molte possibilità.

Questo tutorial ti insegnerà come disegnare forme base in PHP e come eseguire il rendering del testo usando il tuo font preferito.

Disegna forme di base in PHP con GD

Impareremo a conoscere le forme di base in questa sezione e quindi a coprire lo spessore delle linee, i pennelli e gli stili di linea in seguito.

Disegna delle linee

Puoi tracciare una semplice linea retta tra due punti dati usando il immageline ($ immagine, $ x1, $ y1, $ x2, $ y2, $ colore) funzione. Il $ image parametro è una risorsa immagine che sarà stata creata in precedenza usando funzioni come imagecreatetruecolor () o imagecreatefromjpeg (). Useremo imagecreatetruecolor () durante questo tutorial per creare nuove immagini da zero. La funzione disegnerà una linea orizzontale se $ Y1 è uguale a $ y2. Allo stesso modo, traccerà una linea verticale se $ x1 è uguale a $ x2.

Disegna cerchi e archi

La funzione imagearc ($ image, $ cx, $ cy, $ larghezza, $ altezza, $ inizio, $ fine, $ colore) può disegnare archi circolari usando $ cx e $ cy come il suo centro. Il $ larghezza e $ altezza i parametri determinano la dimensione dell'arco su diversi assi. Il $ start e $ end i parametri specificano l'angolo iniziale e finale dell'arco in gradi. Se si desidera disegnare archi completi da 0 a 360 gradi, è possibile utilizzare l'alternativa imageellipse ($ image, $ cx, $ cy, $ larghezza, $ altezza, $ colore) funzione.

Disegna rettangoli e poligoni

Puoi disegnare rettangoli su un'immagine usando il imagerectangle ($ image, $ x1, $ y1, $ x2, $ y2, $ colore) funzione. Il $ x1 e $ Y1 i valori determinano l'angolo in alto a sinistra del rettangolo. Il $ x2 e $ y2 i valori determinano l'angolo in basso a destra. C'è anche un imagepolygon ($ image, $ points, $ num_points, $ color) funzione, che può creare un poligono con qualsiasi numero di lati o punti. Il $ punti parametro è un array in cui due elementi sono accoppiati insieme per ottenere le coordinate di un punto specifico. 

Un'altra funzione chiamata imageopenpolygon () è stato aggiunto a PHP 7, che non traccia una linea tra il primo e l'ultimo punto.

Mettendolo insieme per creare un disegno

Nell'esempio seguente, abbiamo utilizzato tutte queste funzioni per creare un disegno a linee con una capanna, il sole e il terreno.

La cosa importante qui è solo per capire il valore delle diverse coordinate. Volevo disegnare tutto in relazione alla dimensione dell'immagine originale, quindi ho usato il $ img_height e $ img_width variabili per calcolare le coordinate di diversi punti.

Controllo dello spessore della linea, dello stile e dei riempimenti di colore

L'immagine sopra ha un paio di problemi come linee molto sottili e nessuna colorazione. Tutti questi problemi possono essere risolti facilmente usando funzioni come imagesetthickness () e imagefilledrectangle ().

Spessore linea

Il imagesetthickness ($ image, $ thickness) la funzione imposta lo spessore delle linee renderizzate quando si disegnano rettangoli, poligoni, archi, ecc. Ad esempio, l'impostazione $ spessore a 5 renderà qualsiasi figura disegnata usando imagerectangle (), imagearc (), imagepolygon (), ecc. 5 pixel di spessore.

Disegno di forme riempite

Ogni funzione di disegno ha anche una versione a colori riempita che riempie quella particolare figura con un determinato colore. Per esempio, imagefilledrectangle () riempirà il rettangolo disegnato con il colore dato.

Uso dei pennelli

Una funzione GD molto utile è imagesetbrush ($ image, $ brush). Il $ pennello il parametro in questa funzione è solo un'altra risorsa immagine che può essere usata per tracciare linee. Ad esempio, puoi utilizzare un disegno vettoriale trasparente di un fiore come un pennello per aggiungere bellissimi motivi floreali alla tua immagine. Il frammento di codice indicato di seguito è stato scritto per utilizzare l'immagine di una nuvola come un pennello quando si disegna un punto. Questo aggiunge una singola nuvola nel nostro cielo.

Ho trovato questa immagine cloud su Pixabay e ridimensionata ad una dimensione appropriata per il nostro progetto.

Di seguito è riportato il codice completo per l'immagine della capanna. Abbiamo semplicemente aggiunto due versioni di ogni figura, una per disegnare il contorno e l'altra per riempire il colore.

Questo è il risultato finale del codice GD PHP sopra.

Rendering di testo su immagini

PHP GD ha quattro diverse funzioni che ti permettono di renderizzare più caratteri o un solo carattere in direzione orizzontale o verticale. Queste funzioni sono imagechar (), imagecharup (), imagestring (), e imagestringup (). Tutti accettano gli stessi sei parametri, quindi discuteremo semplicemente di imagechar () funzione qui.

Il $ carattere parametro imagechar ($ image, $ font, $ x, $ y, $ stringa, $ colore) la funzione è semplicemente la dimensione del testo renderizzato. Accetta solo valori interi da 1 a 5. Il $ string parametro è il testo che vuoi rendere. Se si passa una stringa multi-carattere alle funzioni char, solo il primo carattere verrà visualizzato sull'immagine. Il imagecharup () e imagestringup () le funzioni renderanno il testo verticalmente dal basso verso l'alto.

Quando si tratta di rendering di testo, le quattro funzioni che abbiamo discusso sopra sono molto limitate. Troverete che anche il più grande valore di dimensione del carattere è troppo piccolo per l'uso normale. Inoltre, il testo può essere scritto solo orizzontalmente e verticalmente.

Fortunatamente, GD ha anche un imagettftext ($ immagine, $ dimensione, $ angolo, $ x, $ y, $ colore, $ fontfile, $ testo) funzione che può rendere il testo in qualsiasi carattere desiderato. Il $ fontfile parametro viene utilizzato per specificare il percorso del carattere TrueType che si desidera utilizzare per visualizzare il testo. Il $ x e $ y i parametri determinano la posizione iniziale del testo renderizzato.

Nell'esempio seguente vengono utilizzate tutte queste funzioni per creare alcuni effetti di testo.

Come puoi vedere, abbiamo reso lo stesso testo con lo stesso carattere in posizioni leggermente diverse per creare effetti come l'ombreggiatura di base del testo. La cosa importante da tenere a mente è che il testo reso da qualsiasi funzione di testo nasconderà completamente il testo sottostante in caso di sovrapposizione. Ecco l'immagine finale ottenuta dopo aver eseguito il codice sopra.

Pensieri finali

Lo scopo di questo tutorial era quello di farti conoscere diverse funzioni GD per disegnare forme base da zero in PHP. Con l'aiuto di un po 'di matematica, sarai in grado di utilizzare queste funzioni per creare forme più complicate come poligoni regolari, rettangoli arrotondati, ecc..

PHP GD ha anche un paio di funzioni molto utili per il rendering del testo su un'immagine. L'uso di un font piacevole farà in modo che il testo renderizzato non sembri strano quando collocato su immagini normali caricate da percorsi di file diversi.

Hai creato effetti di testo più elaborati in PHP? Per favore, condividili con noi nei commenti.