back to top

GD Library: creazione, manipolazione e ridimensionamento immagini con PHP

Le librerie GD (o GD Library), sono componenti fondamentali del linguaggio PHP, progettate per operare sulle immagini. Queste librerie, giunte alla versione 2 (al momento dell’ultimo aggiornamento di questo articolo, l’ultima release disponibile è la 2.3.3), permettono di creare e modificare file grafici nei formati più diffusi come GIF, JPG e PNG.

Installare e attivare le GD Library

Le GD Library potrebbero non essere abilitate di default nel file di configurazione php.ini (anche se solitamente sono attive nella maggior parte dei servizi di hosting). Tuttavia, la procedura per la loro installazione è abbastanza semplice.

Innanzitutto, dobbiamo verificare che nella cartella delle estensioni di PHP (generalmente chiamata “ext” o “extensions”) sia presente una DLL chiamata “php_gd2”. Se così non fosse, possiamo scaricarla facilmente dal sito ufficiale delle GD Library. Una volta ottenuta la DLL, dovremo salvarla nella cartella delle estensioni.

Dopo aver salvato la DLL, è necessario modificare il file php.ini. Cerchiamo la riga seguente tra le Extensions configurabili nel file:

;extension=php_gd2.dll

Basta eliminare il punto e virgola all’inizio della riga per decommentare l’istruzione. Una volta salvate le modifiche, riavviamo il server web (come Apache).

Per verificare che le GD Library siano correttamente installate e attive, possiamo usare la funzione PHP gd_info(), che restituisce informazioni dettagliate sulla versione delle GD Library e le loro capacità:

<?php
var_dump(gd_info());
?>

Il risultato sarà un array con numerose informazioni. Ad esempio:

{ 
    ["GD Version"]=> string(27) "bundled (2.3.3 compatible)" 
    ["FreeType Support"]=> bool(true) 
    ["GIF Read Support"]=> bool(true) 
    ["GIF Create Support"]=> bool(true) 
    ["JPG Support"]=> bool(true) 
    ["PNG Support"]=> bool(true) 
}

Come possiamo vedere, il risultato fornisce molte informazioni, inclusi i formati immagine supportati (GIF, JPG, PNG, ecc.). Questo ci conferma che le GD Library sono correttamente configurate e pronte all’uso.

Creare un’immagine con PHP e le GD Library

Vediamo ora come creare un’immagine in formato JPG utilizzando esclusivamente le GD Library e PHP, senza l’ausilio di alcun software grafico. Ecco un esempio di codice in cui andiamo a creare dinamicamente un’immagine con una scritta:

<?php
$size_testo = 10;
$larghezza_testo = imagefontwidth($size_testo);
$altezza_testo = imagefontheight($size_testo);
$testo = "Creiamo un'immagine con le GD2 di PHP";
$larghezza = strlen($testo);
$larghezza_px = $larghezza_testo * $larghezza;

$img = imagecreate($larghezza_px + 10, $altezza_testo + 10);
$sfondo = imagecolorallocate($img, 192, 192, 192); // Colore di sfondo grigio
$colore_testo = imagecolorallocate($img, 240, 240, 240); // Colore del testo bianco

imagestring($img, $size_testo, 5, 5, $testo, $colore_testo);
imagejpeg($img, "img/img.jpg");
imagedestroy($img);

echo "<img src='img/img.jpg'>";
?>

Questo script crea un semplice banner colorato con del testo centrato. Nel codice sono utilizzate diverse funzioni GD per stabilire le caratteristiche dell’immagine, come le dimensioni, il colore dello sfondo, il colore del testo, e così via.

Le funzioni principali utilizzate includono:

  • imagefontwidth() e imagefontheight(): per calcolare la larghezza e l’altezza del testo in pixel.
  • imagecreate(): per creare l’immagine con le dimensioni calcolate.
  • imagecolorallocate(): per definire i colori dello sfondo e del testo.
  • imagestring(): per scrivere il testo all’interno dell’immagine.
  • imagejpeg(): per salvare l’immagine come file JPEG.
  • imagedestroy(): per liberare la memoria utilizzata dall’immagine.

Manipolare un’immagine con PHP e le GD Library

Le GD Library non solo permettono di creare immagini da zero, ma offrono anche potenti strumenti per manipolare immagini esistenti. Vediamo un esempio su come aggiungere testo ad un’immagine utilizzando un font TrueType:

<?php
$img = imagecreate(180, 35); 
$sfondo = imagecolorallocate($img, 192, 192, 192); 
$stringa = imagecolorallocate($img, 240, 240, 240); 

imagettftext($img, 15, 0, 14, 27, $stringa, "/path/to/font/arial.ttf", "Font: Arial");

header("Content-type: image/png");
imagepng($img);
imagedestroy($img);
?>

L’output di questo script sarà un’immagine PNG con del testo scritto utilizzando il font Arial. La funzione imagettftext() permette di utilizzare qualsiasi font TrueType disponibile sul server, offrendo maggiore flessibilità rispetto a imagestring().

Ridimensionare le immagini con PHP e le GD Library

Uno degli usi più comuni delle GD Library è la creazione di thumbnails, cioè miniature delle immagini originali. Ecco come possiamo creare una miniatura a partire da un’immagine esistente:

<?php
$larghezza_thumb = 100;
$altezza_thumb = 100;
$originale = 'img.jpeg';
$immagine = imagecreatefromjpeg($originale);

$larghezza = imagesx($immagine);
$altezza = imagesy($immagine);
$scala = min($larghezza_thumb / $larghezza, $altezza_thumb / $altezza);

if ($scala < 1) {
    $nuova_larghezza = floor($scala * $larghezza);
    $nuova_altezza = floor($scala * $altezza);

    $immagine_temporanea = imagecreatetruecolor($nuova_larghezza, $nuova_altezza);

    imagecopyresampled($immagine_temporanea, $immagine, 0, 0, 0, 0,
      $nuova_larghezza, $nuova_altezza, $larghezza, $altezza);

    imagedestroy($immagine);
    $immagine = $immagine_temporanea;
}

header("Content-type: image/jpeg");
imagejpeg($immagine);
imagedestroy($immagine);
?>

Questo script crea una miniatura di un’immagine JPEG originale, ridimensionandola per adattarsi alle dimensioni massime di 100×100 pixel. La funzione imagecopyresampled() è utilizzata per garantire che il ridimensionamento mantenga una buona qualità.

Questi esempi mostrano solo alcune delle capacità delle GD Library in PHP. Con queste funzioni, possiamo creare, modificare e manipolare immagini in modo dinamico e potente, fornendo un’esperienza utente ricca e interattiva.

Altri contenuti interessanti

Pubblicità
Claudio Garau
Claudio Garau
Web developer, programmatore, Database Administrator, Linux Admin, docente e copywriter specializzato in contenuti sulle tecnologie orientate a Web, mobile, Cybersecurity e Digital Marketing per sviluppatori, PA e imprese.

Leggi anche...

Cannot modify header information – headers already sent: come risolvere l’errore PHP

L'errore di PHP cannot modify header information - headers...

Ricavare l’estensione di un file con PHP

Quando si lavora con i file in un'applicazione web,...

PHP: impostare il fuso orario italiano

Le tue pagine PHP non mostrano l’orario corretto? Probabilmente...

5 script PHP per gestire BBCode

A volte può aversi l'esigenza di dover offrire agli...

Estrarre hostname e dominio da una URL con PHP

Grazie alla funzione parse_url() di PHP è possibile analizzare...
Pubblicità