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);
	}

}