Applicare filtri alle immagini con GD e PHP

6 ottobre 2017

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:

Figura 1. Immagine di base a cui applicare i filtri.

Immagine di base a cui applicare i filtri

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:

Figura 2. Filtro negate.

Filtro negate

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:

Figura 3. Filtro scala di grigi.

Filtro scala di grigi

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:

Figura 4. Filtro brightness.

Filtro brightness

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à:

Figura 5. Filtro contrasto.

Filtro contrasto

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:

Figura 6. Filtro colora.

Filtro colora

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:

Figura 7. Filtro edge detect.

Filtro edge detect

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:

Figura 8. Filtro rilievo.

Filtro rilievo

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:

Figura 9. Filtro sfocatura gaussiana.

Filtro sfocatura gaussiana

Figura 10. Filtro sfocatura selettiva.

Filtro sfocatura selettiva

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:

Figura 11. Filtro effetto disegno.

Filtro effetto disegno

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:

Figura 12. Filtro smooth.

Filtro smooth

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:

Figura 13. Filtro effetto pixelato.

Filtro effetto pixelato

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:

Figura 14. Colore di base seppia.

Colore di base seppia

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à:

Figura 15. Effetto seppia.

Effetto seppia

Tutte le lezioni

1 ... 43 44 45 ... 59

Se vuoi aggiornamenti su Applicare filtri alle immagini con GD e PHP inserisci la tua e-mail nel box qui sotto:
Tags:
 
X
Se vuoi aggiornamenti su Applicare filtri alle immagini con GD e PHP

inserisci la tua e-mail nel box qui sotto:

Ho letto e acconsento l'informativa sulla privacy

Acconsento al trattamento di cui al punto 3 dell'informativa sulla privacy