Miniature sous contrainte optimisée au maximum

Contenu du snippet

Je cherchais à faire des miniatures devant être affichées dans des tableaux, donc elles ne devaient pas dépasser X pixel de largeur et Y de hauteur.

J'ai souvent vu des sources faisant cela à l'aide d'un coefficient réducteur fixe (exemple: miniature = 1/3 de la vraie photo).

Alors voilà cette petite fonction qui optimise au mieux les dimensions de l'image passée en paramètre aux limites souhaitées.

Source / Exemple :


function MakeThumb($img,$maxX,$maxY) {
	
	// Récupération des infos sur l'image
	$TImage = GetImageSize($img);
	// Rapport initial: aucune réduction
	$rapport = 1;

	// Si la largeur de l'image est supérieure à la limite
	if ($TImage[0] > $maxX)
		// Tant que la largeur réduite est supérieure à la limite
		while ($TImage[0] / $rapport > $maxX)
			// Augmentation de la réduction
			$rapport = $rapport + 0.5;

	// Assignation de la largeur finale
	$xF = $TImage[0] / $rapport;

	// Si la hauteur de l'image est supérieure à la limite
	// Si non, le rapport est le même que celui utilisé pour la largeur
	if ($TImage[1] > $maxY)
		// Tant que la hauteur réduite est supérieure à la limite
		while ($TImage[1] / $rapport > $maxY)
			// Augmentation de la réduction
			$rapport = $rapport + 0.5;

	// Assignation de la hauteur finale
	$yF = $TImage[1] / $rapport; 

	// Récupération du handle de l'image selon son format
	switch($TImage[2]) {
		
		case 1:
		$imageF = ImageCreateFromGIF($img);
		break;
		
		case 2:
		$imageF = ImageCreateFromJPEG($img);
		break;
		
		case 3:
		$imageF = ImageCreateFromPNG($img);
		break;
	}
	
	// Création de la miniature
	$thumbF = ImageCreateTrueColor($xF,$yF);

	// Compatibilité: ImageCopyResized($thumbF,$imageF,0,0,0,0,$xF,$yF,$TImage[0],$TImage[1]);
	ImageCopyResampled($thumbF,$imageF,0,0,0,0,$xF,$yF,$TImage[0],$TImage[1]);
	
	// Envoie de l'image au navigateur selon son format
	switch($TImage[2]) {
		
		case 1:
		ImageGIF($thumbF,'images/mini_'.SubStr($img,StrPos($img,'/') + 1), 60);
		break;
		
		case 2:
		ImageJPEG($thumbF,'images/mini_'.SubStr($img,StrPos($img,'/') + 1), 60);
		break;
		
		case 3:
		ImagePNG($thumbF,'images/mini_'.SubStr($img,StrPos($img,'/') + 1), 60);
		break;
	}

	// Libération de la mémoire
	ImageDestroy($thumbF);
	ImageDestroy($imageF);
}

Conclusion :


Exemple: MakeThumb('images/maphoto.jpg',200,150)

/!\ Modifiez les chemins de vos images

Testé avec succès :p

Un commentaire fait toujours plaisir ;)

En espérant vous avoir un peu aidé...

PyRoFlo

Tout sur la pyrotechnie - http://www.abcpyro.com

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.