JDNet | Solutions | Emploi | Votre high-tech
 
Linternaute | Copainsdavant
Séminaires & Evénements | Etudes
   

Rechercher  

 
Sociétés Prestataires Carnet Formations Progiciels Encyclo Fonds Guide d'achat Comparateur Téléchargement Livres
Actualités
   2003
   2002
   2001
   Livres
Rubriques
   Java/J2EE
   PHP
   XML
   Client Web
   Technos .NET
   Flash
   Algo/Méthodes
   Outils

Dossiers
   Tous les dossiers

   PHP, Flash, SVG
   Perl / CGI - SSI
   Langages Web
   Services Web
   Sécurité
Ressources
   Interviews

   Téléchargement
   Composants
   Documentation
Contacts
   Rédaction
   Webmaster
© Benchmark Group


Créer un album photo en PHP
Première partie: création des vignettes

Pas à pas, exploration d'un cas pratique simple d'utilisation du PHP, au travers de la création d'un album photo.

Introduction
Dans cette nouvelle série de tutoriels, nous prenons l'exemple de la création d'un album photo à partir d'images numérisées pour examiner différents points du langage.

Dans cette première partie, nous allons écrire un petit script pour parcourir un repertoire et ses sous-repertoires, récupérer les images qui s'y trouvent et, à partir de ces images, créer des miniatures (vignettes) que nous stockerons dans un autre repertoire, dédié.
Dans une prochaine étape, nous améliorerons le script en alimentant également une base de données (description de l'image, emplacement, etc.), puis nous utiliserons base et vignettes pour composer le "front-office" de notre album photo.

Parcourir
Nous allons définir une fonction, intitulée scandir(), qui va nous permettre, à partir d'un répertoire racine, de récupérer les images de l'ensemble de l'arborescence, et de créer, à partir de chacune, une vignette.

Découvrons tout de suite cette fonction:

function scandir($dir){
  global $larg;

  global $thumbdir;
  $dossier=opendir($dir);
  while($fichier=readdir($dossier)){
    set_time_limit(0);
    $l=array('.', '..');
    if(!in_array($fichier,$l)){
      if(is_dir($dir."/".$fichier)){
        scandir($dir."/".$fichier);
      }else{
        if(substr(strtolower($fichier),(strlen($fichier)-4),4)==".jpg" ||
           substr(strtolower($fichier),(strlen($fichier)-5),5)==".jpeg"){
          $src=imagecreatefromjpeg($dir."/".$fichier);
          $taille=getimagesize($dir."/".$fichier);
          $img=imagecreate($larg,round(($larg/$taille[0])*$taille[1]));
          imagecopyresized($img,$src,
                                             0,0,0,0,
                                             $larg,round(($larg/$taille[0])*$taille[1]),$taille[0],$taille[1]);
          imagejpeg($img, $thumbdir."/tn_".$fichier);
        }
      }
    }
  }
}

La fonction utilise deux variables globales, l'une contient la largeur des vignettes (les hauteurs de celles-ci seront calculées en préservant le ratio initial), l'autre contient le chemin absolu vers le répertoire de stockage des vignettes.

Le seul argument de la fonction est alors le répertoire courant (initialement la racine choisie, ensuite - la fonction est récursive - les différents sous-répertoires).

Nous utilisons la fonction opendir() pour caractériser l'ouverture d'un (sous-)répertoire, readir() pour obtenir les noms des fichiers de ce répertoire, is_dir() pour déterminer si tel fichier est en fait un répertoire, ou non, enfin in_array() pour déterminer si le nom de fichier n'appartient pas à un tableau de noms exclus (ici les noms "." et ".." (dossier racine et dossier parent sous Unix).

Une fois assurés que nous sommes bien en présence d'un fichier, il nous reste à déterminer son extension (on convertit d'abord le nom en minuscules avec strtolower() puis on extrait les 4 (ou 5) derniers caractères avec substr() - la taille de la chaîne étant obtenue avec strlen()).

Il nous reste (voir cet article pour une explication de l'enchaînement des opérations) à récupérer l'image (imagecreatefromjpeg()), sa taille (getimagesize()), créer une autre image vide de la taille correspondante à la taille de la future vignette (imagecreate()), puis copier en redimensionnant l'image source vers l'image ainsi créée (imagecopyresized()), enfin sauvegarder sur le serveur le résultat (imagejpeg()). L'ensemble de ces fonctions sont issues de la librairie GD.

Voici pour cette première étape. Le prochain volet abordera la mise en base de données de l'ensemble des informations nécessaires à l'exploitation de ces vignettes au sein d'un "front-office".

[ Jérôme Morlon, 1er juin 2002 , JDNet ]

Gratuit - Les nouveautés de
JDNet Développeurs
Toutes nos newsletters
 

Quel est le meilleur langage pour aborder la programmation ?
Basic (VB & co...)
C/C++
Java/C#
PHP
Pascal/Delphi
Perl
Python
autre...



Les outils de développement dans le Guide des Solutions
e-business

L'encyclopédie JDNet Toutes les notions pratiques, techniques et économiques relatives à l'e-business.
>> Accès à la rubrique "Développement"

Comparez les prix Matériel, PDA, modems...
Les bonnes affaires de la high-tech avec Kelkoo.
>> Comparateur

Société | Contacts | Publicité | Presse | Recrutement | Tous nos sites | Données personelles
Pour tout problème de consultations, écrivez au Webmaster.
© Benchmark Group, 4 rue diderot 92156 Suresnes Cedex