Bloc note sur la fonction PHP imagecopyresampled()
Présentation de la fonction :
Cette fonction permet de coller une image ($src_image) dans une autre ($dst_image).
L’image collée permet peut être cropper (= rognée) pour rentrer de manière proportionnelle dans l’image de destination. Ci dessous la fonction avec ses 10 arguments :
bool imagecopyresampled ( resource $dst_image , resource $src_image , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_width , int $dst_height , int $src_width , int $src_height )
Schéma comprendre les arguments :
$src_image = image à coller $dst_image = reçoit image $src_image
+------------+---------------------------------+ +------------+--------------------+
| | | | | |
| | | | $dst_y |
| | | | | |
| $src_y | +-- $dst_x --+----$dst_width----+ |
| | | | | | |
| | | | | Echantillon | |
| | | | | image | |
+-- $src_x --+------ $src_width ------+ | | $dst_height | |
| | | | | | | |
| | | | | | | |
| $src_height | | | +------------------+ |
| | Echantillon | | | |
| | image | | | |
| | à coller | | | |
| | | | | |
| | | | +---------------------------------+
| | | |
| | | |
| +------------------------+ |
| |
| |
+----------------------------------------------+
script PHP utilisant imagecopyresampled()
Cette fonction va coller une image, $Img, sur une image de fond blanche de taille $largeur,$hauteur.
Si $Img est plus petite en largeur et/ou en hauteur que l’image de fond blanche, l’image va être rognée de manière proportionnelle et des bords blancs mise en place autour, sinon $Img va être rognée et couvrir à 100% l’image de fond en gardant les proportions d’origines :
function my_cropper($ext,$Img,$largeur,$hauteur,$filename,$path_destination)
{
if(strtolower($ext == "jpg") || strtolower($ext == "jpeg")) {
$image = imagecreatefromjpeg($Img);
} else if(strtolower($ext == "png")) {
$image = imagecreatefrompng($Img);
} else if(strtolower($ext == "gif")) {
$image = imagecreatefromgif($Img);
}
$taille = getimagesize($Img);
$sortie = imagecreatetruecolor($largeur,$hauteur);
$white = imagecolorallocate ( $sortie, 255, 255, 255 );
imagefilledrectangle($sortie,0,0,$largeur,$hauteur,$white);
if($taille[0] >= $largeur && $taille[1] >=$hauteur){
$coef = min($taille[0]/$largeur,$taille[1]/$hauteur);
$deltax = $taille[0]-($coef * $largeur);
$deltay = $taille[1]-($coef * $hauteur);
imagecopyresampled($sortie,$image,0,0,$deltax/2,$deltay/2,$largeur,$hauteur,$taille[0]-$deltax,$taille[1]-$deltay);
}else if($taille[0] < $largeur && $taille[1] < $hauteur){
$xpos = ($largeur - $taille[0])/2;
$ypos = ($hauteur - $taille[1])/2;
imagecopyresampled($sortie,$image,$xpos,$ypos,0,0,$taille[0],$taille[1],$taille[0],$taille[1]);
}else if($taille[0] >= $largeur && $taille[1] < $hauteur){
$ypos = ($hauteur - $taille[1])/2;
$trop = $taille[0] - $largeur;
imagecopyresampled(
$sortie, $image,
0, $ypos,
$trop/2, 0,
$largeur, $taille[1],
$largeur, $taille[1]
);
}else if($taille[0] < $largeur && $taille[1] >= $hauteur){
$xpos = ($largeur - $taille[0])/2;
$trop = $taille[1] - $hauteur;
imagecopyresampled(
$sortie, $image,
$xpos , 0,
0 , $trop/2,
$taille[0], $hauteur,
$taille[0], $hauteur
);
}
$miniature = $path_destination."/".$filename."__".$largeur."x".$hauteur.".".$ext;
if(strtolower($ext == "jpg") || strtolower($ext == "jpeg")) {
imagejpeg($sortie,$miniature,100);
imagedestroy($sortie);
} else if(strtolower($ext == "png")) {
imagepng($sortie,$miniature,9);
imagedestroy($sortie);
} else if(strtolower($ext == "gif")) {
imagegif($sortie,$miniature);
imagedestroy($sortie);
}
}