Redimention d'image, librairie gd

Contenu du snippet

Bonjour, j'ai créé cette fonction qui permet de redimentionner une image jpg, gif, ou png, elle utilise la librairie GD de php.

liste des arguments :
$source_url est l'image source, ex : images/1.jpg
$destination_url est l'image destination, ex : images/1_mini.jpg
$taille est la taille de la miniature, appliquée soit a la largeur soit à la heuteur (voir code ci-dessous)
$type est le type de l'image, par défaut jpg, il peut être gif, GIF, png, PNG, jpg, jpeg, JPEG
$save définie si l'on veux quand même enregistrer l'image même si la miniature n'a pas été créée
TRUE si on veux quand même enregistrer
FALSE si on ne veux pas

Source / Exemple :


function mini_image($source_url, $destination_url, $taille, $type='jpeg', $save=1) {

/*
$source_url est l'image source, ex :  images/1.jpg
$destination_url est l'image destination, ex : images/1_mini.jpg
$taille est la taille de la miniature, appliquée soit a la largeur soit à la heuteur (voir code ci-dessous)
$type est le type de l'image, par défaut jpg, il peut être gif, GIF, png,  PNG, jpg, jpeg, JPEG
$save définie si l'on veux quand même enregistrer l'image même si la miniature n'a pas été créée
	TRUE si on veux quand même enregistrer
	FALSE si on ne veux pas
	
créé par o-thib-o */

	if (preg_match('#jpe?g#i', $type)) {
	$source = imagecreatefromjpeg($source_url); // si l'image est un jpg
	$ext = 1;}
	
	elseif (preg_match('#png#i', $type)) {
	$source = imagecreatefrompng($source_url); // si l'image est un png
	$ext = 2;}
	
	elseif (preg_match('#gif#i', $type)) {
	$source = imagecreatefromgif($source_url); // si l'image est un gif
	$ext = 3;}
	
	$largeur_source = imagesx($source); // on détermine les dimentions de l'image source
	$hauteur_source = imagesy($source);
	
	// On n'effectue la redimention seulement si la miniature que l'on veux faire est plus petite que la source
	if ($taille < $largeur_sourc OR $taille < $hauteur_source) { 
		
		/* On regarde la  plus grande des deux simentions de l'image

  • Si la largeur est plus grande que la hauteur on calculera la miniature à partir ce celle-ci
  • et inversement pour éviter que des image par example qui font 10x600 soient mal redimentionnées */
if ($largeur_source > $hauteur_source) { $largeur_destination = $taille; $hauteur_destination = $largeur_destination * $hauteur_source / $largeur_source; } else { $hauteur_destination = $taille; $largeur_destination = $hauteur_destination * $largeur_source / $hauteur_source; } $destination = imagecreatetruecolor($largeur_destination, $hauteur_destination); // On crée la miniature vide // On crée la miniature imagecopyresampled($destination, $source, 0, 0, 0, 0, $largeur_destination, $hauteur_destination, $largeur_source, $hauteur_source); //on enregistre la miniature que l'on viens de créé switch ($ext) { case 1 : imagejpeg($destination, $destination_url); break; case 2 : imagepng($destination, $destination_url); // malheuresement je n'ai pas trouver le moyen de redimentionner les png 24bits en gardant la transparence break; case 3 : imagegif($destination, $destination_url); break; } return 1; // l'image a été enregistrée on retourne TRUE } // si on a pas créé la miniature car elle étais plus grande que la source else { if ($save) { copy($source_url,$destination_url); // on copie quand même l'image return 1; // l'image a été enregistrée on retourne TRUE } else { return 0; // rien n'a été faits, on retourne FALSE } } }

Conclusion :


Voila j'espers que cette source vous aura été utile, si vouzs avez des remarques a faire n'hésitez pas je suis ouvert à toute critique =)

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.