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
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.