[Spip] GetImageSize (php)

en php, la fonction
    GetImageSize
permet de récupérer directement la taille d'une image au format "width=xxx
height=uuu" ; assez pratique pour gérer des images jetées en vrac dans un
dossier, comme je le fais sur

http://www.monde-diplomatique.fr/revues/ (cliquer sur "mother jones" pour
voir).

le code à cet endroit-là est :

if (file_exists($nomcarte.".jpg")) {
                $size = GetImageSize($nomcarte.".jpg");
                $breve = "<IMG SRC=\"/revues/documents/$valeurs[0].jpg\"
    ALT=\" \" align=right ".$size[3].">\n".$breve;
}elseif (file_exists($nomcarte.".gif")) {
                $size = GetImageSize($nomcarte.".gif");
                $breve = "<IMG SRC=\"/revues/documents/$valeurs[0].gif\"
    ALT=\" \" align=right ".$size[3].">\n".$breve;
}

en php, la fonction
    GetImageSize
permet de récupérer directement la taille d'une image au format "width=xxx
height=uuu" ; assez pratique pour gérer des images jetées en vrac dans un
dossier, comme je le fais sur

Fil, tu viens de découvrir la fonction ultime de Php... Serieux, ce $size[3], je
l'adore...

Erwan.

Hello Erwan,

Le 28/09/2000, vous m'écriviez...

Fil, tu viens de découvrir la fonction ultime de Php... Serieux, ce $size[3], je
l'adore...

Ben, moi, j'aimerais que quelqu'un m'eclaire la dessus:
$locale = "en_US"; # Locale time format (look at "/usr/share/locale" with this you can have date and time in your language!)

Pour avoir mon language, je mets quoi ?

A bientot!

Davduf.
jeudi 28 septembre 2000

Hello Erwan Cario,

Le 28/09/2000, vous m'écriviez...

Ben, moi, j'aimerais que quelqu'un m'eclaire la dessus:
$locale = "en_US"; # Locale time format (look at
"/usr/share/locale" with this you can have date and time in your
language!)

Pour avoir mon language, je mets quoi ?

T'as qu'à essayer

$locale = "fr";

Mais c'est pas gagné... du tout... du tout...

C'est même perdu perdu ;-))))
Que faire ??? Qui a linux, la ?

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*

Dufresne David wrote:

>> Ben, moi, j'aimerais que quelqu'un m'eclaire la dessus:
>> $locale = "en_US"; # Locale time format (look at
>> "/usr/share/locale" with this you can have date and time in your
>> language!)
>>
>> Pour avoir mon language, je mets quoi ?
>
>T'as qu'à essayer
>
>$locale = "fr";
>
>Mais c'est pas gagné... du tout... du tout...

C'est même perdu perdu ;-))))
Que faire ??? Qui a linux, la ?

mylogin@myhost:~ > ls -l /usr/share/locale/ | grep fr
drwxr-xr-x 3 root root 1024 Dec 6 1999 fr
drwxr-xr-x 3 root root 1024 Apr 12 01:31 fr_BE
drwxr-xr-x 3 root root 1024 Apr 12 01:31 fr_CA
drwxr-xr-x 3 root root 1024 Apr 12 01:31 fr_CH
drwxr-xr-x 3 root root 1024 Apr 12 01:31 fr_FR
drwxr-xr-x 3 root root 1024 Apr 12 01:31 fr_LU

Donc si "fr" ne marche pas, il reste "fr_FR".

Good luck

Michaël

Juste un problème : $racine, c'est le nom de l'image par rapport au disque
dur (/www/serveur/images/du/chemin/toto[.gif]) ou par rapport au site
(http://www.serveur.com/images/du/chemin/toto[.gif]) ?

Tout le système fonctionne en adresses du site (URL) et non en chemins du disque. Histoire d'avoir la plus grande compatibilité possible.

Il n'y a que lors de la procédure d'installation du dossier "ecrire" (les versions de SPIP) que j'ai déjà envoyées, qu'on a besoin des chemins du disque (mais normalement c'est calculé automatiquement) afin de générer la protection du dossier.

ARNO*

Hello Michaël,

Le 28/09/2000, vous m'écriviez...

Dufresne David wrote:

Donc si "fr" ne marche pas, il reste "fr_FR".

Good luck

Bravo! C'etait ca!!!
Merci!

Ca doit ramer si tu obliges php à faire un accès au serveur pour lire la
taille de l'image ! Ou alors c'est que tu procèdes en URLs relatifs ? (par
exemple ton script d'appel est
http://www.serveur.com/images/du/chemin/index.php3 et toto.gif est dans le
même dossier ?)

* Arno* (arno@scarabee.com) écrivait :