Miniature sous contrainte optimisée au maximum

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 883 fois - Téléchargée 27 fois

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

Ajouter un commentaire

Commentaires

Messages postés
4
Date d'inscription
jeudi 10 novembre 2011
Statut
Membre
Dernière intervention
2 octobre 2017

Bonsoir
Ce tuto super bien fait date un peu maintenant mais je viens de le trouver en faisant une recherche pour redimensionner des images online.
J'ai recopié le code intégralement en modifiant les chemins.

Cependant à la fin l'image créée et enregistrée est noire.

Que faire ?

Avez-vous la solution ?

D'avance merci
Messages postés
4
Date d'inscription
jeudi 10 novembre 2011
Statut
Membre
Dernière intervention
2 octobre 2017

Bonjour à toutes et à tous

Ce tuto date et j'espère que quelqu'un pourra me répondre.

J'ai appliqué exactement le même code que ci-dessus en modifiant juste les chemins des images.

La fonction crèe bien une miniature mais cette miniature est noire. L'image initiale n'est pas associée.
Que faire ?

Merci
Messages postés
228
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
27 novembre 2013

Comment fait tu ton appel au telechargement de l'image please???
Messages postés
2
Date d'inscription
dimanche 10 juillet 2005
Statut
Membre
Dernière intervention
4 août 2005

C'est bon j'ai rien dit... oubli du CHMOD !!! Alala il était tard aussi. Désolé et bravo encore.
Messages postés
2
Date d'inscription
dimanche 10 juillet 2005
Statut
Membre
Dernière intervention
4 août 2005

Salut je me lance à peine dans tout ce qui est retouche d'image et je dois vous dire que je suis tres admiratif de vos travaux et de votre communauté aussi...

Voilà le script de Pyroflo a l'air parfait pour mes besoins, donc merci à lui déjà.
Le seul soucis c'est que j'ai recopié tel quel le code en changeant bien evidement les variables de la fonction MakeThumb en MakeThumb('test.jpg',200,150); mais ca ne marche pas.

Voilà donc rien de bien méchant mais j'ai ce message d'erreur:

Warning: imagejpeg(): Unable to open 'images/mini_est.jpg' for writing in /home/www/image.php on line 46


Bon je débute donc excusez moi si je vous fait répeter. De plus j'ai fait un phpinfo(); j'ai GD2 donc je comprends pas.

Merci d'avance
Afficher les 33 commentaires

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.