Devant la diversité des formats d'image actuels, il est parfois nécessaire de connaître les dimensions d'une image afin d'adapter les paramètres «width» et «height» lors de son affichage sur une des pages du site.
C'est notamment le cas si vous proposez à vos visiteurs de déposer sur votre site leur avatar.
Aurélien nous a déjà proposé une solution et vous trouverez deux liens sur ces deux articles un peu plus bas sur cette page.
En ASP, il existe un composant gratuit qui permet de connaître ces dimensions.
En PHP, il suffit d'utiliser la fonction getimagsize ;
Voyons donc les étapes successsives de sa mise en oeuvre.
Installation
Comme beaucoup de composants, il s'agit d'une DLL à copier sur le serveur et à enregistrer dans la base de registre.
Il convient donc, dans un premier temps, de copier le fichier «IMGSIZE.DLL» sur le disque de votre serveur.
Dans un deuxième temps, il faut exécuter, sur le serveur, la commande «REGSVR32 chemin_d'_accès_à_la_DLL»
Exemple :
Si vous copiez le fichier «IMGSIZE.DLL» dans «C:\outils\IMGSIZE.DLL», il faudra exécuter la commande : «REGSVR32 C:\outils\IMGSIZE.DLL» Le composant ImgSize
Utilisation
Voyons d'abord comment fonctionne ImgSize
<% ' Création d'un objet IMGSIZE Set Picto=Server.CreateObject("ImgSize.Check") ' Déclaration de l'image à analyser Picto.FileName="C:\Images\truc.gif" ' On teste s'il y a une erreur if Picto.Error <> "" then Response.Write "Erreur : <b>" & Picto.Error & "</b>" else ' Récupération des dimensions largeur=Picto.Width hauteur=Picto.Height End if ' Libération de l'objet Set Picto=Nothing %>
Concrètement
Supposons que vous autorisez un avatar qui fasse 100 pixels de large sur 100 pixels de haut au maximum.
Comment faire pour conserver la proportionnalité de l'image uploadée par votre utilisateur ?
Tout d'abord, allez jeter un oeil sur les scripts d'Aurélien : RedimImage
et :
AveImgClass
Maintenant, voici celui que je vous propose :
<% ' Nous allons créer une procédure Sub Redimimage(urlimg,maxX,maxY) ' Vérifier que l'image existe bien Set FSO = Server.CreateObject("Scripting.FileSystemObject") dir = Server.MapPath("./") ' Vous mettrez ce que vous voulez Fnm = dir & "\" & urlimg if FSO.FileExists(Fnm) then ' Création d'un objet IMGSIZE Set Picto=Server.CreateObject("ImgSize.Check") ' Déclaration de l'image à analyser Picto.FileName=Server.Mappath("./"&urlimg) ' On teste s'il y a une erreur if Picto.Error <> "" then Response.Write "Erreur : <b>" & Picto.Error & "</b>" else ' Récupération des dimensions largeur=Picto.Width hauteur=Picto.Height ' Libération de l'objet Set Picto=Nothing ' Calculons le ratio idéal ratiox=largeur/maxX ' Ratio en largeur ratioy=hauteur/maxY ' Ratio en hauteur if(ratiox>ratioy) then ' Quel est le plus grand ratio=ratiox else ratio=ratioy end if response.write "<img src="&urlimg&" width="&Cint(largeur/ratio)&" height="&Cint(hauteur/ratio)&">" end if end if Set FSO=Nothing end sub ' ' Et cette procédure sera appelée comme ceci : ' Redimimage "photos/db77.gif",100,100 %>