Chi sonoDove sonoGuestBookLink AmiciContattamiSiteMap

Risorse per WebMaster e Contenuti gratuiti per SITI Web

Libreria GD

Attenzione ... Questa e' solo la prima parte!

Funzioni GD: Principali funzioni e loro esempi

La libreria GD contiene numerose funzioni che consentono di creare e lavorare con immagini dinamiche "al volo" in ambiente di programmazione PHP.

In questa sezione, invece di illustrare sintassi ed uso delle varie funzioni, svilupperemo una serie di script php che ne fanno uso, partendo dal fatto che ... guardando s'impara meglio e prima che non studiando.
Comunque, prima di iniziare con gli esempi, occorre considerare alcuni note di carattere generale.

Percorso dei file

Per poter manipolare i file (nel nostro caso quelli di tipo immagine), occorre fornire al PHP il loro percorso preciso, che possiamo indicare con ./nomefile se si trovano nella dir attuale, ./subdir/nomefile se si trovano in una sua subdirectory o ./../dir/nomefile se si trovano in una directory precedente.
Potremmo anche indicare il loro percorso con /membri/nomeutente/path/nomefile (valido per server su Altervista) oppure, come faremo noi, ricavando la root del sito ed aggiungendo /path/nomefile con:
$root=str_replace($_SERVER["PHP_SELF"],"",$_SERVER["SCRIPT_FILENAME"]);
$file=$root."/path/nomefile";
L'istruzione $root possiamo metterla all'inizio del nostro programma e iniziare le funzioni con:
global $root;

Caratteri TrueType per scrivere

su Download Free Fonts troviamo una raccolta di 6500 fonts scalabili da cui scegliere quelli che vogliamo utilizzare nelle nostre immagini

per scrivere un testo usare la funzione:
imageTTFtext("identicatore immagine","H caratteri","angolo inclinazione","pos.x","pos.y","identificatore colore","sorgente font","testo voluto");
per conoscere lo spazio che il testo utilizzera' usare la funzione:
$box=imageTTFbox("identicatore immagine","H caratteri","angolo inclinazione","sorgente font","testo voluto");
che restituisce l'array $box da 8 elementi tra cui $box[2] che fornisce la larghezza che sara' occupata dal testo.

Creare un'immagine nuova

Per creare un'immagine usare la funzione $img=imagecreate($X,$Y); che usa solo 256 colori e non ammette l'uso del canale Alpha (la trasparenza), o meglio ancora $img=imagecreatetruecolor($X,$Y); capace di contenere 16.581.375 colori, occupando pero' piu' memoria.
Entrambe queste funzioni ammettono gli argomenti $X e $Y, che definiscono rispettivamente la larghezza e l'altezza dell'immagine virtuale da creare, e restituiscono un oggetto (ossia un'istanza della classe imagecreate) identificato da "$img", da utilizzare con le successive funzioni.
Per sapere quale delle due funzioni usare:
if(function_exists('imagecreatetruecolor')){ $img=imagecreatetruecolor($X,$Y);}
else {$img=imagecreate($X,$Y);}

Elaborare un'immagine esistente

Acquisiamo i parametri dell'immagine che vogliamo elaborare:
$src=$root."/path/nomefile";//indirizzo del file
$size = getimagesize($src); //acquisisce nell'array $size dimensioni e tipo immagine
La memoria occupata da un immagine non e' uguale alla dimensione del suo file, ma e' il risultato della moltiplicazione tra larghezza per altezza per numero di bit utilizzati per i colori. Se getimagesize restituisce un array vuoto, significa che la memoria disponibile e' insufficiente e quindi occorre aumentarla. Verifichiamo se la memoria e' sufficiente con:
if(empty($size)){
echo "immagine che occupa troppa memoria.Aumnentare memory_limit in php.ini o in .htaccess ed eventualmente upload_max_filesize";
exit;
}
In caso positivo:
$X = $size[0]; //larghezza immagine
$Y = $size[1]; //altezza immagine
$file_type= $size['mime']; //tipo immagine image/pjpeg, image/jpeg, image/x-png, image/png, image/gif

A seconda del tipo "$file_type" trovato, creiamo l'oggetto "$img" che rappresenta l'immagine nel suo formato:
if("$file_type" == "image/pjpeg" || "$file_type" == "image/jpeg") $img=imagecreatefromjpeg($path);
if("$file_type" == "image/x-png" || "$file_type" == "image/png") $img=imagecreatefrompng($path);
if("$file_type" == "image/gif") $img=imagecreatefromgif($path);

Lavorare a colori

Per lavorare a colori, occorre la funzione "imagecolorallocate", che restituisce un identificatore del colore da usare e che richiede un identificatore dell'oggetto immagine su cui operare e tre interi, compresi tra 0 e 255, che sono i livelli di rosso,verde e blu del colore voluto.
Esempio per definire il colore nero identificato da $black:
$black=imagecolorallocate($img,0,0,0);
- con imagecreate il primo colore definito e' automaticamente assegnato allo sfondo (il colore della tela virtuale su cui dipingere)
- con imagecreatetruecolor il colore di sfondo e' sempre nero. Se si desidera cambiarlo quindi occorrera' coprirlo, magari utilizzando la funzione imageFilledRectangle().
Per rendere trasparente un colore (normalmente lo sfondo) usare la funzione:
imagecolortransparent($img,$colore);

Visualizzare e/o salvare l'immagine

Sia le funzioni per le nuove immagini, che quelle per la manipolazione delle esistenti, operano in sostanza su un oggetto che alla fine occorre materializzare nella memoria del server usando una delle funzioni: imagejpeg ( per immagine tipo image/jpeg ), imagepng ( per immagine tipo image/png ) e imagegif ( per immagine tipo image/gif ). Quindi, occorre definire il tipo d'immagine che vogliamo.
A) per le immagini nuove:

B) per quelle manipolate seguire la procedura precedente, sostituendo alla funzione imagepng($img); il seguente codice occorrente per materializzare nella memoria del server il tipo d'immagine corrispondente a quello dell'immagine che abbiamo importata:
if ("$file_type" == "image/pjpeg" || "$file_type" == "image/jpeg"){
imagejpeg ($img, $root."/path/nomefile",100);// 100 stabilisce la max qualita' dell'immagine, 75 e' un buon compromesso tra qualita' e occupazione spazio
} else if ("$file_type" == "image/x-png" || "$file_type" == "image/png"){
imagealphablending($img, false);
imagesavealpha ($img, true);//imagealphablending e imagesavealpha per mantenere la trasparenza delle png
imagepng ($img, $root."/path/nomefile",0);//livello di compressione variabile da 0 (nessuna compressione) a 9 (max compressione).
} else if ("$file_type" == "image/gif") {
imagegif ($img,$root."/path/nomefile");
}
($root."/path/nomefile" e' il pathname del file da salvare, se non si vuole effettuare il salvataggio, mettere al suo posto NULL oppure "".)


Liberare la memoria

Liberare poi la memoria dagli "scarti" del procedimento con:
imagedestroy($img);//libera la memoria occupata dall'oggetto identificato con $img
Ripetere la funzione per ciascuno degli identificatori d'immagini usati