Créer une miniature limitée en surface (et pas en dimensions)

Contenu du snippet

Bonjour à tous,

Voilà, pour les besoins de mon site je cherchais un code permettant de créer des miniatures qui ne sont pas limitées en largeur ou hauteur maximale, mais en surface maximale (afin que les logos de tout le monde soient affichés équitablements).

Donc voilà le code, c'est pas grand chose, et c'est un modification d'un code déjà existant. Donc rien de bien glorieux, je le poste uniquement si d'autres personnes cherchent la même chose que moi

Supporte les format Gif, Jpeg et PNG

Source / Exemple :


<?php

// Crée des images miniatures
// Nécessite la librairie "php_gd2"
/*utilisation de la fonction :
$path = chemin d'accès au dossier contenant la photo
$fichierSource = nom de la photo
$surface = surface maximale autorisée pour l'image
$destination = dossier de destination de la photo, par rapport à l'emplacement de la fonction */
function CreateThumb($path, $fichierSource, $surface, $destination)
{
	//teste le format de l'image et crée l'image concerné
	$image_size=getimagesize($path.$fichierSource );
	switch ( $image_size[2] ) {
		case 1 :
			$source = ImageCreateFromGif($path.$fichierSource);
			$mime_photo='image/gif';
		break;
		case 2 :
			$source = ImageCreateFromJPEG($path.$fichierSource);
			$mime_photo='image/jpeg';
		break;
		case 3 :
			$source = ImageCreateFromPNG($path.$fichierSource);
			$mime_photo='image/png';
		break;
		default:
			return 0;
	}
	
	$largeurSource = imagesx($source);
	$hauteurSource = imagesy($source);
	
	//calcul le rapport entre largeur et longueur...
	$rapport_dim= $largeurSource / $hauteurSource;
	
	// Si la surface de l'image actuelle est trop grande par rapport à la limite
	if ( ($largeurSource * $hauteurSource) > $surface ) {
		$largeurDestination = floor( sqrt( $rapport_dim * $surface ) );
		$hauteurDestination = $largeurDestination / $rapport_dim;
	} else {
		$largeurDestination = $largeurSource;
		$hauteurDestination = $hauteurSource;
	}

	//crée l'image (taille de l'imange source + taille de l'ombre)
	$im = ImageCreateTrueColor ($largeurDestination, $hauteurDestination);

	//rempli le fond de blanc
	$blanc=ImageColorAllocate ($im, 255, 255, 255);
	ImageFill($im, 0, 0, $blanc);
	ImageColorTransparent ($im, $blanc);

	//ajoute par dessus l'image source miniaturisée
	ImageCopyResampled($im, $source, 0, 0, 0, 0, $largeurDestination, $hauteurDestination, $largeurSource, $hauteurSource);

	//crée la miniature
	switch ( $mime_photo) {
		case 'image/jpeg' :
			ImageJpeg ($im, $destination.'/'.$fichierSource);
		break;
		case 'image/gif' :
			ImageGif ($im, $destination.'/'.$fichierSource);
		break;
		case 'image/png' :
			ImagePng ($im, $destination.'/'.$fichierSource);
		break;
	}
	return 1;
}

?>

Conclusion :


En espérant que ça vous serve

MadMatt

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.