function crop($img,$dest,$largeur=0,$hauteur=0){
$dimension=getimagesize($img);
$ratio = $dimension[0] / $dimension[1];
// Création des miniatures
if($largeur==0 && $hauteur==0){ $largeur = $dimension[0]; $hauteur = $dimension[1]; }
else if($hauteur==0){ $hauteur = round($largeur / $ratio); }
else if($largeur==0){ $largeur = round($hauteur * $ratio); }
if($dimension[0]>($largeur/$hauteur)*$dimension[1] ){ $dimY=$hauteur; $dimX=round($hauteur*$dimension[0]/$dimension[1]); $decalX=($dimX-$largeur)/2; $decalY=0;}
if($dimension[0]<($largeur/$hauteur)*$dimension[1]){ $dimX=$largeur; $dimY=round($largeur*$dimension[1]/$dimension[0]); $decalY=($dimY-$hauteur)/2; $decalX=0;}
if($dimension[0]==($largeur/$hauteur)*$dimension[1]){ $dimX=$largeur; $dimY=$hauteur; $decalX=0; $decalY=0;}
$miniature =imagecreatetruecolor ($largeur,$hauteur);
$ext = end(explode('.',$img));
if(in_array($ext,array('jpeg','jpg','JPG','JPEG'))){$image = imagecreatefromjpeg($img); }
elseif(in_array($ext,array('png','PNG'))){$image = imagecreatefrompng($img); }
elseif(in_array($ext,array('gif','GIF'))){$image = imagecreatefromgif($img); }
else{ return false; }
imagecopyresampled($miniature,$image,-$decalX,-$decalY,0,0,$dimX,$dimY,$dimension[0],$dimension[1]);
imagejpeg($miniature,$dest,90);
return true;
}
Tu peux effectivement utiliser ce script en ne mettant que le width ca marchera ^^ le height a une valeur par défault à 0, or quand il est a 0 il va chercher le height proportionnel ^^
j'espère que ca t'aura aidé: