Creare e manipolare immagini con la libreria GD di PHP

PHP può anche essere utilizzato per lavorare sulle immagini, la libreria GD supporta diversi formati immagine tra cui GIF, PNG, JPEG, WBMP e XPM

Pubblicato da ,
Ultima modifica

GD è una libreria già integrata in PHP, per essere sicuri di averla già installata nella propria versione di PHP usare phpinfo().

Supporta diversi formati di immagine, in particolare per sapere quali formati supporta la nostra versione di GD si può utilizzare la funzione gd_info(), la quale restituisce informazioni sulla versione e le funzionalità della libreria corrente installata:

Codice PHP

 <?php 

var_dump(gd_info()); 

otterremo così un output simile a questo:

 array(12)
{
["GD Version"]=> string(26) "bundled (2.1.0 compatible)" 
["FreeType Support"]=> bool(true) 
["FreeType Linkage"]=> string(13) "with freetype" 
["GIF Read Support"]=> bool(true) 
["GIF Create Support"]=> bool(true) 
["JPEG Support"]=> bool(true) 
["PNG Support"]=> bool(true) 
["WBMP Support"]=> bool(true) 
["XPM Support"]=> bool(true) 
["XBM Support"]=> bool(true) 
["WebP Support"]=> bool(true) 
["JIS-mapped Japanese Font Support"]=> bool(false) 
}

in questo esempio i formati supportati sono GIF, JPEG, PNG, WBMP, XPM, XBM, WebP, poichè hanno un valore booleano uguale a true.

In questo articolo vedremo:

  1.  come creare un'immagine ridimensionata ex nova partendo da un'immagine di grosse dimensioni e salvarla sul server remoto;
  2.  come restituire un output di immagine ridimensionata ottenuta da un'immagine di grosse dimensioni.

 

Esempio 1:

Supponiamo di avere un'immagine (/images/myimage.jpg) in formato JPEG dalla quale vogliamo ottenere una miniatura (thumbnail) di dimensioni  180X60 pixel:

Codice PHP

 <?php 

list($width,$height)=getimagesize($_SERVER['DOCUMENT_ROOT'].'/images/myimage.jpg'); 

$thumbnail=imagecreatetruecolor(180,60); 

$source=imagecreatefromjpeg($_SERVER['DOCUMENT_ROOT'].'/images/myimage.jpg'); 

imagecopyresized($thumbnail,$source,0,0,0,0,180,60,$width,$height); 

imagejpeg($thumbnail,$_SERVER['DOCUMENT_ROOT']."/images/myimage_thumb.jpg",75);

la funzione list() recupera informazioni dall'immagine, le funzioni imagecreatetruecolor(), imagecreatefromjpeg()imagecopyresized() creano un'immagine ridimensionata salvandola in memoria, imagejpeg() carica l'immagine miniatura appena creata sul server remoto, quest'ultima ha come parametri di ingresso l'immagine miniatura, il percorso in cui salvare la foto, il nome e la qualità, in particolare la qualità di un'immagine va da 1 a 100, il valore di default è 75.

Esempio 2:

Prendiamo in considerazione l'immagine in formato PNG 

'/images/myimage.png' 

e vogliamo un output della stessa immagine ma ridimensionata del 50% rispetto alle dimensioni attuali

Codice PHP

 <?php 
//File and new size 
$file = $_SERVER['DOCUMENT_ROOT'].'/images/myimage.png'; 
$size = 0.5; 

// Content type 
header('Content-Type:image/png'); 

//Get new sizes 
list($width,$height)=getimagesize($file); 
$newwidth=$width*$size; 
$newheight=$height*$size; 

//Load 
$thumb=imagecreatetruecolor($newwidth,$newheight); 
$source=imagecreatefrompng($file); 

//Resize 
imagecopyresized($thumb,$source,0,0,0,0,$newwidth,$newheight,$width,$height);

//Output 
imagepng($thumb);

$file e $size sono rispettivamente la foto e la percentuale di che vogliamo applicare all'immagine, header type é impostato come 'Content-Type: image/png', la funzione list() recupera informazioni dall'immagine originale altezza e larghezza, $newwidth e $newheight sono le nuove dimensioni scalte del 50%,