But : créer une miniature à partir d’une image, avec une largeur et une hauteur fixes, sans agrandir l’image (pour ne pas avoir une miniature de mauvaise qualité) si elle est plus petite que la taille de la miniature souhaitée.
Ne pas rogner l’image, la centrer en hauteur et en largeur et remplir l’espace vide avec une couleur de fond.
(Pour redimensionner une image en rognant les côtés trop longs, voir cet article miniature php)
On a 3 cas possibles :

Dans tous les cas, on commence par remplir le fond de la bonne couleur.
Cas n°1 : L’image est plus petite en hauteur et en largeur : on recopie l’image telle quelle, sans la redimensionner, on la centre en hauteur et en largeur
Cas n°2 : L’image sort du cadre et est proportionnement trop grande en largeur : on redimensionne pour avoir la bonne largeur et la centre en hauteur
Cas n°3 : L’image sort du cadre et est proportionnement trop grande en hauteur : on redimensionne pour avoir la bonne hauteur et on centre en largeur
function creerMiniature($chemin,$W,$H,$color=array(0,0,0))
/*
* $chemin : chemin de l'image
* $W : largeur de la miniature
* $H : hauteur de la miniature
* $color : couleur du fond, tableau(r,g,b)
*/
{
$chemin2=substr($chemin,0,strrpos($chemin,'.')).'_mini.jpg';
$img_src_resource=imagecreatefromjpeg($chemin);
$img_dst_resource = imagecreatetruecolor($W, $H);
$color=imagecolorallocate($img_dst_resource,$color[0],$color[1],$color[2]);
imagefill($img_dst_resource,0,0,$color);
list( $w, $h ) = getimagesize($chemin);
//L’image est plus petite en hauteur et en largeur :
//On recopie l'image telle quelle, sans la redimensionner, on la centre en hauteur et en largeur
if(($w<=$W) and ($h<=$H))
{
imagecopyresampled($img_dst_resource,$img_src_resource,((int)(($W-$w)/2)),((int)(($H-$h)/2)),0,0,$w,$h,$w,$h);
imagejpeg( $img_dst_resource, $chemin2,100);
}
//Cas n°2 : L’image sort du cadre et est proportionnement trop grande en largeur
//On redimentionne pour avoir la bonne largeur et la centre en hauteur
if((($w>$W) or ($h>$H)) and (($w/$h)>($W/$H)))
{
$new_w=$W;
$new_h=($h*$new_w)/$w;
imagecopyresampled($img_dst_resource,$img_src_resource,0,((int)(($H-$new_h)/2)),0,0,$new_w,$new_h,$w,$h);
imagejpeg( $img_dst_resource, $chemin2,100);
}
//Cas n°3 : L’image sort du cadre et est proportionnement trop grande en hauteur :
//On redimentionne pour avoir la bonne hauteur et on centre en largeur
if((($w>$W) or ($h>$H)) and (($w/$h)<=($W/$H)))
{
$new_h=$H;
$new_w=($w*$new_h)/$h;
imagecopyresampled($img_dst_resource,$img_src_resource,((int)(($W-$new_w)/2)),0,0,0,$new_w,$new_h,$w,$h);
imagejpeg( $img_dst_resource, $chemin2,100);
}
}
Exemple :
creerMiniature('img/1.jpg',120,60,array(255,255,255));
0 Comments.