Nella lezione precedente abbiamo introdotto la libreria GD e le sue funzioni di base per manipolare le immagini. Vediamo ora un'altra funzione molto interessante della libreria GD per applicare dei filtri alle immagini. Concluderemo con un esempio un po' più articolato in cui andremo a replicare il filtro seppia.
La funzione imagefilter()
La funzione imagefilter()
consente di applicare ad un'immagine un set di filtri forniti di default dalla libreria GD. La funzione prende in ingresso:
$image
: una risorsa di tipo immagine.$filtertype
: il nome del filtro da applicare.
I parametri successivi sono opzionali e dipendono dal filtro che stiamo utilizzando. Li introdurremo man mano che analizzeremo i singoli filtri.
Vediamo quali sono i filtri disponibili fornendo un semplice esempio per ognuno di essi. Gli esempi partiranno tutti dalla seguente immagine di base:
Filtro negate
Il filtro negate consente di invertire i colori di un'immagine.
$image = imagecreatefromjpeg('imagefilter_0.jpg');
imagefilter($image, IMG_FILTER_NEGATE);
imagejpeg($image, 'imagefilter_negate.jpg');
Il risultato sarà il seguente:
Filtro scala di grigi
Possiamo trasformare un'immagine in scala di grigi con il seguente filtro:
$image = imagecreatefromjpeg('imagefilter_0.jpg');
imagefilter($image, IMG_FILTER_GRAYSCALE);
imagejpeg($image, 'imagefilter_grayscale.jpg');
Il risultato è il seguente:
Filtro brightness
Il filtro lucentezza prende in ingresso un terzo parametro che indica il livello della lucentezza da applicare:
$image = imagecreatefromjpeg('imagefilter_0.jpg');
imagefilter($image, IMG_FILTER_BRIGHTNESS, 50);
imagejpeg($image, 'imagefilter_brightness.jpg');
Il risultato sarà un'immagine con la lucentezza aumentata:
Filtro contrasto
Il filtro contrasto, come per il precedente, accetta un terzo parametro indicante il valore:
$image = imagecreatefromjpeg('imagefilter_0.jpg');
imagefilter($image, IMG_FILTER_CONTRAST, 20);
imagejpeg($image, 'imagefilter_contrast.jpg');
L'immagine con più contrasto sarà:
Filtro colora
Il filtro colora prende in ingresso quattro parametri aggiuntivi che rappresentano il valore, rispettivamente, di rosso, verde, blu e del canale alpha. Il range per ogni parametro è compreso tra 0 e 255.
$image = imagecreatefromjpeg('imagefilter_0.jpg');
imagefilter($image, IMG_FILTER_COLORIZE, 10, 20, 200);
imagejpeg($image, 'imagefilter_colorize.jpg');
L'immagine risultante applicando i colori selezionati è la seguente:
Filtro edge detect
Il filtro riconosce ed enfatizza i bordi all'interno dell'immagine:
$image = imagecreatefromjpeg('imagefilter_0.jpg');
imagefilter($image, IMG_FILTER_EDGEDETECT);
imagejpeg($image, 'imagefilter_edgedetect.jpg');
Il risultato:
Filtro rilievo
Il filtro rilievo ha un utilizzo simile al precedente:
$image = imagecreatefromjpeg('imagefilter_0.jpg');
imagefilter($image, IMG_FILTER_EMBOSS);
imagejpeg($image, 'imagefilter_emboss.jpg');
Il risultato:
Filtri sfocatura gaussiana e selettiva
Anche questi filtri non prendono in ingresso parametri aggiuntivi:
$image = imagecreatefromjpeg('imagefilter_0.jpg');
imagefilter($image, IMG_FILTER_GAUSSIAN_BLUR);
imagejpeg($image, 'imagefilter_gaussianblur.jpg');
$image = imagecreatefromjpeg('imagefilter_0.jpg');
imagefilter($image, IMG_FILTER_SELECTIVE_BLUR);
imagejpeg($image, 'imagefilter_selectiveblur.jpg');
Il risultato:
Filtro effetto disegno
Per riprodurre un effetto disegno sull'immagine possiamo usare il filtro mean removal:
$image = imagecreatefromjpeg('imagefilter_0.jpg');
imagefilter($image, IMG_FILTER_MEAN_REMOVAL);
imagejpeg($image, 'imagefilter_meanremoval.jpg');
Il risultato sarà il seguente:
Filtro smooth
Per rendere un'immagine più "liscia" possiamo usare il filtro smooth. Prende in ingresso un parametro aggiuntivo che rappresenta il valore:
$image = imagecreatefromjpeg('imagefilter_0.jpg');
imagefilter($image, IMG_FILTER_SMOOTH, 100);
imagejpeg($image, 'imagefilter_smooth.jpg');
Il risultato:
Filtro effetto pixelato
Per riprodurre un effetto pixelato ad un'immagine possiamo usare il filtro pixelate. Il filtro prende in ingresso due parametri ulteriori:
- la dimensione in pixel dei quadrati.
- booleano che indica se usare l'effetto pixel avanzato. Di default è
false
.
Il risultato:
Effetto seppia con PHP e GD
I filtri appena visti possono anche essere usati in combinazione per riprodurre effetti davvero molto interessanti. Un effetto molto semplice da realizzare è quello seppia che possiamo ottenere grazie alla combinazione dei filtri scala di grigi e colora. In ordine, infatti, andremo dapprima a rendere l'immagine in scala di grigi per poi colorarla con il seguente colore:
Il codice completo è il seguente:
$image = imagecreatefromjpeg('imagefilter_0.jpg');
imagefilter($image, IMG_FILTER_GRAYSCALE);
imagefilter($image, IMG_FILTER_COLORIZE, 90, 50, 0);
imagepng($image, 'imagefilter_sepia.jpg');
Mentre il risultato sarà: