Le librerie GD2 di PHP sono utilizzate in genere per il resize delle immagini, questo avviene soprattutto nei casi in cui vengano impiegate per la realizzazione di on line galleries basate su miniature (thumbnails) linkate ad ingrandimenti.
Queste librerie permettono però di operare in molti modi sulle immagini, un esempio potrebbe essere quello della correzione dei colori; in questo breve tutorial vedremo infatti come si possa opacizzare un'immagine senza utilizzare alcun programma di fotoritocco, sfruttando semplicemente PHP e le sue estensioni per la grafica.
In particolare mostreremo come si possa trasformare un'immagine come questa:


<?php
//definiamo l'header HTTP dell'immagine
@header ("content-type: image/jpeg");
//definiamo l'immagine da utilizzare
//e carichiamola in una variabile
$immagine = 'img.jpg';
$input = @imagecreatefromjpeg($immagine);
//recuperiamo le dimensioni dell'originale
$dimensione = @getimagesize($immagine);
//creiamo una copia dell'immagine per il file di destinazione
$output = @imagecreatefromjpeg($immagine);
//sovrapponiamo all'immagine il colore bianco
$colore = @imagecolorallocate($output, 255, 255, 255);
//la sovrapposizione rispetterà le dimensioni dell'originale
@imagefilledrectangle
($output, 0, 0, $dimensione[0], $dimensione[1], $colore);
//applichiamo un valore di opacità
$correzione = 25;
//applichiamo la correzione
@imagecopymerge($output, $input, 0, 0, 0, 0, $dimensione[0], $dimensione[1], $correzione);
//mostriamo l'output e liberiamo la memoria
@imagejpeg($output);
@imagedestroy($input);
@imagedestroy($output);
?>
Strano a dirsi ma in uno scriptino così piccolo ci sono veramente una marea di spunti interessanti, vediamoli uno per uno.
Innanzitutto abbiamo definito l'header HTTP corretto per l'immagine, senza di esso il browser non sarebbe in grado di comprendere che si tratta di un JPEG.
In secondo luogo abbiamo eseguito il loading dell'immagine originale in un variabile; la variabile è stata passata come argomento alla funzione getimagesize(), questa ha il compito di restituire le dimensioni di un file grafico; il suo output consiste in un array di 4 elementi con indice da 0 a 3: larghezza, altezza, tipo di immagine e una stringa con altezza e larghezza (tipo height="n" width="n") riutilizzabile per i tag IMG.
Per il nostro script utilizzeremo i valori corrispondenti ai primi due indici.
Il passaggio successivo consiste nella creazione di una copia, per far questo abbiamo riutilizzato la funzione imagecreatefromjpeg(); la copia così ottenuta viene passata alla funzione imagecolorallocate() che si occupa di "virarla" nel colore bianco, "255 ,255,255" sono infatti gli identificativi RGB per quel colore.
La funzione imagefilledrectangle() creerà poi un rettangolo di sovrapposizione sulla base del colore definito in precedenza; dato che il foreground dovrà ricoprire perfettamente l'immagine, alla funzione sono stati passati i primi due indici prodotti da getimagesize() relativi a larghezza e altezza.
La variabile $correzione è stata valorizzata con il grado di opacità da applicare all'immagine, nel nostro caso abbiamo optato per "25" utilizzando una scala che va da un minimo di 1 ad un massimo di 100.
$correzione è stata poi passata come parametro alla funzione imagecopymerge(), che si occupa di effettuare la sovrapposizione tra immagine di partenza e copia modificata, da notare gli argomenti centrali, tutti pari a zero che rappresentano le coordinate (ascisse e ordinate) di partenza per entrambi i file.
Infine, la funzione imagejpeg() ci ha permesso di mostrare l'output creato dallo script. La memoria utilizzata per la gestione delle immagini è stata poi liberata grazie all'azione della funzione imagedestroy().
| Corso Linux Guida completa al sistema open-source. A partire da 39 €. | |
| Corso MySQL Gestione del database open-source. A partire da 49 €. | |
| Corso PHP Corso completo per la creazione di siti Web dinamici. Sconto -25% sino al 15/02/2012. |