SPIP-uZine intègre une telle fonction:
function integre_image($racine,$lalign){
if(file_exists("$racine.gif")){
$image="$racine.gif";
}elseif(file_exists("$racine.jpg")){
$image="$racine.jpg";
}elseif(file_exists("$racine.png")){
$image="$racine.png";
}
if ($image){
$taille=getimagesize($image);
$largeur=$taille[0];
$hauteur=$taille[1];
return "<IMG SRC='$image' ALIGN='$lalign' WIDTH=$largeur HEIGHT=$hauteur HSPACE=5 VSPACE=3 BORDER=0>";
}else{
return "";
}
}
$racine est le nom de l'image sans sa terminaison (.gif, .jpg, .png) - en effet dans les raccourcis, on appelle un image simplement par son numéro, sans savoir de quel type d'image il s'agit. Et $lalign est "right" ou "left" (ou autre), qui correspond à l'alignement que l'on désire pour cette image.
La focntion getimagesize contient une autre variable très pratique: $taille[3] renvoit le type de fichier graphique (gif, png, jpg). Je l'utilise dans le back-office lorsqu'on envoit une image dans un article:
if ($ajout_image=="oui"){
if (isset($image)){
$type=getimagesize($image);
$type=$type[2];
if ($type=="1"){$type="gif";}
if ($type=="2"){$type="jpg";}
if ($type=="3"){$type="png";}
$loc="../IMG/art$id_article-$num_img.$type";
copy($image,$loc);
unlink($image);
}
}
$image est bien entendu le fichier que l'on a téléchargé. De cette façon, l'utilisateur n'a pas besoin d'indiquer lui-même de quel type de fichier graphique il s'agit, et n'a pas besoin non plus de le nommer d'un manière précise (sous Mac, on oublie souvent d'indiquer une terminaison pour un fichier). Ici, après le getimagesize, c'est donc $type[2] qui indique de quel type de fichier il s'agit. On connait ainsi la terminaison à donner au fichier, et ça fabrique un nouveau fichier renommé (du type "art152-1.gif": l'image 1 de l'article 152 au format gif).
Toujours dans le backoffice, il y a encore une subtilité lorsqu'on édite un article: les images sont affichées dans la colonne de gauche, dont la largeur maximale est de 200 pixels. Donc on ne doit pas afficher les images sur une largeur de plus de 200 pixels, sinon ça fait exploser la mise en page. Ainsi, si la $largeur (récupérée par getimagesize) est supérieure à 200 pixels, on calcule un taux de réduction ($rapport) que l'on applique ensuite à la $largeur et à la $hauteur. Notez qu'il faut absolument arrondir la valeur (fonction floor()), pour obtenir des entiers.
Il y a encore une autre subtilité dans le script: pour chaque article, je regarde dans le dossier "/IMG" et j'y cherche les images qui correspondent à cet article (du type "art1.gif" ou "art2.jpg", etc.) avant de les afficher. C'est le but de la fonction afficher_img(), qui déclenche ensuite la fonction montrer_img de manière récurrente.
function montrer_img($leNom,$num){
global $num_max;
ereg("art$num\-([0-9]*)\.",$leNom,$match);
$numero=$match[1];
if ($numero>$num_max){$num_max=$numero;}
$taille=getimagesize($leNom);
$largeur=$taille[0];
$hauteur=$taille[1];
if ($largeur>200){
$rapport=200/$largeur;
$largeur=200;
$hauteur=floor($hauteur*$rapport);
}
echo "<P align='center'><IMG SRC='$leNom' HEIGHT='$hauteur' WIDTH='$largeur'>";
}
function afficher_img($id_article){
global $num_max;
$num_max=0;
$myDir=opendir("../IMG/");
while($leNom=readdir($myDir)){
$num=$id_article;
if(ereg("^art$num\-[0-9]*\.",$leNom)){
montrer_img("../IMG/$leNom","$id_article");
}
}
closedir($myDir);
}
Amicalement,
ARNO*