PHP/Programmazione/Immagini
Wikibooks, manuali e libri di testo liberi.
- Introduzione PHP/Introduzione
- Installazione e configurazione PHP/Installazione e configurazione
- Programmazione PHP/Programmazione
- Una pagina PHP PHP/Programmazione/Una pagina PHP
- echo PHP/Programmazione/echo
- Commenti PHP/Programmazione/Commenti
- Variabili PHP/Programmazione/Variabili
- Operatori PHP/Programmazione/Operatori
- Array PHP/Programmazione/Array
- Condizioni PHP/Programmazione/Condizioni
- Cicli PHP/Programmazione/Cicli
- Funzioni di base PHP/Programmazione/Funzioni di base
- Funzioni personalizzate PHP/Programmazione/Funzioni personalizzate
- Variabili globali PHP/Programmazione/Variabili globali
- $GLOBALS PHP/Programmazione/Variabili globali/$GLOBALS
- $_GET PHP/Programmazione/Variabili globali/$_GET
- $_POST PHP/Programmazione/Variabili globali/$_POST
- $_SESSION PHP/Programmazione/Variabili globali/$_SESSION
- $_COOKIE PHP/Programmazione/Variabili globali/$_COOKIE
- $_SERVER PHP/Programmazione/Variabili globali/$_SERVER
- File PHP/Programmazione/File
- Immagini PHP/Programmazione/Immagini
- Espressioni regolari PHP/Programmazione/Regexp
- Programmazione orientata agli oggetti PHP/Programmazione/OOP
- Programmazione avanzata con le classi PEAR PHP/PEAR
- PHP e i database PHP/Database
- Funzioni PHP per l'accesso ai database
- Database e object oriented PHP/Dboop
- PHP Design Pattern PHP/PHP Design Pattern
- Smarty PHP/Smarty
- Sicurezza delle applicazioni web PHP/Sicurezza
- PHP CLI: Command Line Interpreter PHP/Cli
- PHP GTK2: applicazioni desktop in PHP PHP/Gtk
- Wikibook credits
Tra le funzionalità del PHP esiste anche quella di creare dinamicamente immagini e restituire un output non quindi di testo (come può essere quello dell'HTML) ma di immagine.
Per fare ciò è possibile usare le librerie GD, delle librerie open-source sviluppate dalla Boutell. È possibile avere maggiori informazioni sull'argomento sul sito ufficiale.
Prima di procedere quindi alla creazione di immagini con PHP, si verifichi ovviamente di avere installato le librerie GD sul proprio computer.
Per creare quindi una nuova immagine in PHP dovremmo quindi:
- caricare in memoria una nuova immagina o una copia di un'immagine esistente
- caricare (si dice allocare) i colori usati per le eventuali modifiche dell'immagine
- eseguire eventuali modifiche (creare linee, punti, riempimenti, aggiungere testo...)
- restituire come output un'immagine dopo aver correttamente impostato nell'header il tipo di file restituito
- distruggere successivamente l'immagine, per liberare la memoria.
Indice |
[modifica] Creare una nuova immagine
Per la creazione di una nuova immagine PHP mette a disposizione diverse funzioni. Per creare un'immagine ex-novo usiamo la funzione:
imagecreatetruecolor(h, w)
che crea in memoria una nuova immagine di altezza h e larghezza w (in pixel) e restituisce un riferimento all'immagine appena creata. Esiste anche una funzione, seppur non raccomandata, che crea un'immagine con una minore ampiezza di colori: imagecreate, che ha lo stesso comportamento di imagecreatetruecolor.
Per caricare in memoria un'immagine salvata su disco usiamo invece le funzioni
imagecreatefrom<tipo> (percorso)
che carica un'immagine salvata sul server del tipo specificato. Ad esempio:
$img = imagecreatefrompng('immagine.png');
Esiste inoltre una funzione
imagecreatefromstring (testo)
che crea un'immagine contenente il testo specificato come argomento
Nei casi avvenga un errore, le funzioni restituiscono false.
[modifica] Lavorare con i colori
Per allocare un colore si usa la funzione
imagecolorallocate(immagine,r,g,b)
che restituisce un riferimento al colore date le sue componenti RGB.
È possibile, se si sta lavorando con formati come il PNG (che supporta la trasparenza), allocare colori trasparenti con la funzione imagecolortransparent
imagecolortransparent(immagine,colore)
dove colore è una risorsa colore valida creata con imagecolorallocate; è anche possibile allocare colori con una determinata trasparenza, compresa tra 0 (opaco) e 127 (completamente trasparente) con la funzione
imagecolorallocatealpha(immagine,r,g,b,trasparenza)
Si noti che il primo colore allocato verrà automaticamente usato come colore di sfondo dell'immagine.
Creata la nuova immagine e allocati i colori, è ora possibile lavorarci sopra in due modi:
- disegnando nuovi pixel (creando linee, forme, ecc...)
- lavorando sui pixel già esistenti (serve se l'immagine è stata caricata da un file) tagliandone parti, ricolorandola o ridimensionandola)
[modifica] Disegnare punti, linee e forme
Per disegnare un pixel usiamo la funzione
imagesetpixel(immagine, x, y, colore)
dove immagine è una risorsa di immagine , x e y sono le coordinate del punto da disegnare e colore è una risorsa che identifica un colore allocato in precedenza.
imageline(immagine, x1, y1, x2, y2, colore)
Traccia una linea dal punto x1, y1 al punto x2, y2
imagerectangle(immagine, x1, y1, x2, y2, colore)
Disegna un rettangolo che ha per diagonale la linea da x1, y1 a x2, y2.
imageellipse(immagine, x, y, w, h, colore)
Disegna una ellisse di centro x, y di altezza h e larghezza w. Se h è uguale a w, allora si otterrà un cerchio.
imagearc(immagine, x, y, w, h, ang1, ang2, colore)
Funzione come imageellipse ma disegna solo l'arco di ellisse compreso tra gli angoli (in gradi) ang1 e ang2, I gradi sono contati in senso orario a partire dalle ore 3.
[modifica] Lavorare sui pixel già esistenti
Per lavorare su un'immagine già disegnata in precedenza, ad esempio una foto, si hanno a disposizione molte funzioni.
Una delle più utilizzate è sicuramente imagecopyresized, che permette di copiare una porzione rettangolare di un'immagine ed incollarla in un'altra (con possibilità di ridimensionarla durante il processo). Es:
imagecopyresized(dst_image, src_image, dst_x, dst_y, src_x, src_y, dst_w, dst_h, src_w, src_h);
dove:
dst_imageè l'immagine dove verrà incollatadst_x, dst_ysono le coordinate X e Y didst_imagedove verrà incollata la porzione di immagine;src_x, src_ysono le coordinate X e Y disrc_imageche corrispondono all'angolo in alto a sinistra del rettangolo da copiare;dst_w, dst_h, src_w, src_hsono invece rispettivamente larghezza e altezza dell'immagine rettangolare che sarà incollata e larghezza e altezza dell'immagine rettangolare da copiare.
Si può quindi capire che se dst_w è uguale a src_w e dst_h è uguale a src_h, la porzione rettangolare dell'immagine resterà della stessa misura, in caso contrario l'immagine risulterà allungata e/o allargata.
La funzione imagecopyresampled riceve gli stessi parametri di imagecopyresized, con la differenza che, in caso di ridimensionamento, la qualità è migliore.
Esiste poi la funzione imagefilter, che permette numerosi effetti quali la scala di grigio, l'incassato, la ricolorazione: per la sua complessità, rimando al manuale ufficiale, dove è possibile trovare funzionamento ed esempi.
[modifica] Stampare l'output
Prima di stampare l'output del risultato ottenuto è necessario indicare, usando la funzione header, il content-type (tipo del contenuto, che per default è impostato a text/html); quindi:
header("Content-type: image/<tipo>");
dove tipo sta per "png", "jpeg" o "gif" a seconda del formato in cui si vuole visualizzare l'immagine.
Per visualizzare l'immagine, secondo il tipo scelto in precedenza, usare la funzione imagepng, imagejpeg o imagegif, che prendono come parametro la risorsa immagine da visualizzare.
Infine occorre liberare la memoria, che è stata occupata dall'immagine, con la funzione imagedestroy, che prende come unico parametro la risorsa immagine da distruggere.
Sebbene l'omissione di questa procedura non provochi la visualizzazione di errori da parte di PHP, è fortemente consigliata soprattutto quando si usano immagini piuttosto grandi.