Io faccio cosi.

Codice PHP:
function make_thumb_square($image,$a,$l,$final,$dir_to_put,$path)
{

    
# mi ciuccio l'estensione per creare le immagini
    
$estensione explode(".",strtolower($image));
    
$ext array_pop($estensione);

    
# preparo lo switch per il tipo esatto di funzione in base al tipo d'immagine
    
switch($ext){
    default:
        
$funzione_image_create "ImageCreateFromJpeg";
        
$funzione_image_new "ImageJpeg";
    break;
    case 
"jpg":
        
$funzione_image_create "ImageCreateFromJpeg";
        
$funzione_image_new "ImageJpeg";
    case 
"jpeg":
        
$funzione_image_create "ImageCreateFromJpeg";
        
$funzione_image_new "ImageJpeg";
    break;
    case 
"png":
        
$funzione_image_create "ImageCreateFromPng";
        
$funzione_image_new "ImagePng";
    break;
    case 
"gif":
        
$funzione_image_create "ImageCreateFromGif";
        
$funzione_image_new "ImageGif";
    break;
    }

    
$quality_thumb = ($ext == 'png') ? '6' '60';

    
# vedo in quale cartella si trova l'immagine
    
$file $path.'/'.urldecode($image);
    
$file_thumb $path.'/'.$dir_to_put.'/'.urldecode($image);
  
    
$centerX $a/2;
    
$centerY $l/2;
    
    if( 
$l $a ){
      
$luy 0;
      
$lux $centerY-$centerX;
      
$rdy $a;
      
$rdx $a;
    }
    else{
      
$lux 0;
      
$luy $centerX-$centerY;
      
$rdx $l;
      
$rdy $l;
    }
    
    
# restituisce un elemento identificativo per l'immagine data
    
$img_original $funzione_image_create($file);

    
//ImageCreateTrueColor: funzione per creare un'immagine con illimitati colori e con altezza e lunghezza dati
    
$img_final ImageCreateTrueColor($final,$final);
    
    
# funzione per ridurre le immagini: 
    
imagecopyresampled($img_final$img_original00$lux$luy$final$final$rdx$rdy);
    
    
# questa funzione crea fisicamente il nuovo file
    
$funzione_image_new($img_final$file_thumb$quality_thumb);
    
    
# queste due funzioni liberano la memoria dalle immagini create
    
ImageDestroy($img_original);
    
ImageDestroy($img_final);
    
# end make_thumb_square