http://intranet/travail/test/cutImg.php?img=./img.jpg&h=300&l=50&align=11
Renvois l'image réduite :
Les dimensions ne sont pas changé sauf si l'image est plus petite ;o).
L'image est réduite puis recadré si un dimension est trop grande.
"align" permet de définir la position du recadrage :
align=largeur.hauteur; 1:gauche ou haut 2:centrer 3:droite ou bas
exemple de centrage en hauteur et en largeur :
http://intranet/travail/test/cutImg.php?img=./img.jpg&h=300&l=50&align=22
En haut à droite :
http://intranet/travail/test/cutImg.php?img=./img.jpg&h=300&l=50&align=13
Source / Exemple :
<?php
// http://intranet/travail/test/cutImg.php?align=11&img=./img.jpg&h=300&l=50
// align=largeur.hauteur; 1:gauche ou haut 2:centrer 3:droite ou bas
$largeur=100;
$hauteur=100;
$image='./img.jpg';
$align=22;
if(isset($_GET['img']))
{
$imaget=$_GET['img'];
if(is_file($imaget) && ereg(".jp[e]?g$", $imaget) && !ereg("[\.]{2}/\\", $imaget) && !ereg("://", $imaget))
{
$image=$imaget;
}
}
if(isset($_GET['align']) && ereg("^[1-3]{2}$", $_GET['align']))
{
$align=$_GET['align'];
}
if(isset($_GET['h']) && ereg("^[0-9]{2,}$", $_GET['h']))
{
$hauteur=$_GET['h'];
}
if(isset($_GET['l']) && ereg("^[0-9]{2,}$", $_GET['l']))
{
$largeur=$_GET['l'];
}
$img_in = imagecreatefromjpeg($image);
$size = getimagesize($image);
$l = $size[0];
$h = $size[1];
if ($l >= $largeur && $h>= $hauteur) {
$new_haut = ($h * $largeur) / $l;
if($new_haut < $hauteur) {
$new_haut = $hauteur;
$new_larg = ($l * $hauteur) / $h;
} else {
$new_larg = $largeur;
}
// on réduit l'image à la largeur voulue, mais en gardant la hauteur proportionnelle
$img_out = imagecreate($new_larg, $new_haut);
imagecopyresized($img_out, $img_in, 0, 0, 0, 0, imagesx($img_out), imagesy($img_out), $l, $h);
// création d'une image vide aux dimensions de la miniature
$im = imagecreate($largeur, $hauteur);
switch($align[0])
{
case 1:
$src_x=0;
break;
case 2:
$src_x=($new_larg-$largeur)/2;
break;
case 3:
$src_x=($new_larg-$largeur);
break;
}
switch($align[1])
{
case 1:
$src_y=0;
break;
case 2:
$src_y=($new_haut-$hauteur)/2;
break;
case 3:
$src_y=($new_haut-$hauteur);
break;
}
// on copie la zone de l'image de hauteur voulue dans l'image vide
@imagecopy($im, $img_out, 0, 0, $src_x, $src_y, $largeur, $hauteur) or
imagecopy($im, $img_out, 0, 0, 0, 0, $largeur, $hauteur);
imagejpeg($im);
// destruction des images en mémoire
imagedestroy($img_out);
imagedestroy($im);
} elseif ($l < $largeur && $h >= $hauteur) {
$img_out = imagecreate($l, $h);
imagecopyresized($img_out, $img_in, 0, 0, 0, 0, imagesx($img_out), imagesy($img_out), $l, $h);
$im = imagecreate($l, $hauteur);
switch($align[1])
{
case 1:
$src_y=0;
break;
case 2:
$src_y=($h-$hauteur)/2;
break;
case 3:
$src_y=($h-$hauteur);
break;
}
@imagecopy($im, $img_out, 0, 0, 0, $src_y, $l, $hauteur) or
imagecopy($im, $img_out, 0, 0, 0, 0, $l, $hauteur);
imagejpeg($im);
// destruction des images en mémoire
imagedestroy($img_out);
imagedestroy($im);
} elseif ($l >= $largeur && $h < $hauteur) {
$img_out = imagecreate($l, $h);
imagecopyresized($img_out, $img_in, 0, 0, 0, 0, imagesx($img_out), imagesy($img_out), $l, $h);
$im = imagecreate($largeur , $h);
switch($align[0])
{
case 1:
$src_x=0;
break;
case 2:
$src_x=($l-$largeur)/2;
break;
case 3:
$src_x=($l-$largeur);
break;
}
@imagecopy($im, $img_out, 0, 0, $src_x, 0, $largeur, $h) or
imagecopy($im, $img_out, 0, 0, 0, 0, $largeur, $h);
imagejpeg($im);
// destruction des images en mémoire
imagedestroy($img_out);
imagedestroy($im);
} elseif ($l < $largeur && $h< $hauteur) {
imagejpeg($img_in);
}
// destruction de l'image en mémoire
imagedestroy($img_in);
?>
Conclusion :
A essayer...