Nella nostra esperienza di sviluppo di siti internet, un problema che di frequente si pone è quello di avere delle dimensioni fissate per le immagini che vengono mostrate.
Il problema potrebbe non sussistere nel caso di un sito statico, o dove chi carica le immagini da mostrare sono solo gli amministratori, i quali si dovranno prendere la briga di ridimensionare ogni singola immagine in modo da non creare disguidi nella visualizzazione.
Ma se per l'utente vi è la possibilità di caricare una immagine che verrà poi visualizzata in qualche modo, nessuno può prevedere in quali dimensioni l'utente caricherà tale immagine.
Inoltre utilizzando script di manipolazione di immagini, faciliteremo il lavoro a priori: nel caso avessimo una gallery che prende le immagini di una cartella, non dovremo avere la preoccupazione delle dimensioni a cui le immagini saranno caricate poichè lo script lavorerà per noi.
Lo scopo di questo tutorial è quello di mostrarvi uno script che permetta la totale automatizzazione del riscalamento, in modo da delegare il più possibile le operazioni da compiere al server di hosting.
Data la vasta eterogeneità di dimensioni che le immagini possono assumere, abbiamo pensato di fare uno script universale per il riscalamento automatico delle immagini.
Lo script è di facile comprensione nonostante l'insidiosità della libreria GD di PHP.
Eccovi il codice dello script:
Code:
header('Content-type: image/png');
function createImageByType($fileName)
{
/* Questa funzione prende in input il nome del file
* e ritorna una immagine GD partendo da una delle
* estensioni possibili.
* */
switch(exif_imagetype($fileName))
{
case IMAGETYPE_GIF: $b=imagecreatefromgif($fileName); break;
case IMAGETYPE_JPEG: $b=imagecreatefromjpeg($fileName); break;
case IMAGETYPE_PNG: $b=imagecreatefrompng($fileName); break;
}
return $b;
}
$dir = "immagini/";
/* La variabile $dir contiene un prefisso di tipo directory
* da associare alle immagini.
* */
if(!isset($_GET['w']) || $_GET['w']=="")
$MAX_W=125;
else
$MAX_W=$_GET['w'];
/* Se passata in GET la variabile w sarà
* il nostro massimo width.
* */
if(!isset($_GET['h']) || $_GET['h']=="")
$MAX_H=125;
else
$MAX_H=$_GET['h'];
/* Se passata in GET la variabile h sarà
* il nostro massimo height.
* */
if(isset($_GET['img']) && $_GET['img']!="")
{
if(file_exists($dir.$_GET['img']))
$immagine=$dir.$_GET['img'];
else
$immagine = $dir."default.jpg";
}
else
$immagine=$dir."default.jpg";
/* Deve essere passata in GET la variaibile img
* che rappresenta il nome della immagine, al quale
* sarà aggiunto come prefisso la variabile $dir.
* Nel caso non venga passata tale variaibile, il sistema
* utilizzerà una immagine di default chiamata appunto
* $dir."default.jpg".
* */
list($w,$h)=getimagesize($immagine);
if($w>=$h)
{
/* Caso in cui l'immagine sia più larga che alta. */
if($w<$MAX_W)
{
$b=createImageByType($immagine);
}
else
{
$b_aus=createImageByType($immagine);
$new_h=($MAX_W/$w)*$h;
$b=imagecreatetruecolor($MAX_W,$new_h);
imagecopyresized($b,$b_aus,0,0,0,0,$MAX_W,$new_h,$w,$h);
}
}
else
{
/* Caso in cui l'immagine sia più alta che larga. */
if($h<$MAX_H)
{
$b=createImageByType($immagine);
}
else
{
$b_aus=createImageByType($immagine);
$new_w=($MAX_H/$h)*$w;
$b=imagecreatetruecolor($new_w,$MAX_H);
imagecopyresized($b,$b_aus,0,0,0,0,$new_w,$MAX_H,$w,$h);
}
}
imagepng($b);
/* Facciamo il display dell'immagine. */
imagedestroy($b);
/* Distruggiamo l'immagine appena visualizzata. */
?>
Per visualizzare l'immagine ci basterà inserire in una qualsiasi pagine HTML il seguente codice:
Code:
dove <nome_script> sta per il nome con cui sarà salvato lo script e <immagine> è il nome di una immagine contenuta nella cartella immagini/ con path relativa a partire dalla script.
Buon utilizzo.


