Créer une galerie de photos (Etape 1)
Bonjour à tous,
Une des applications pratiques de l’utilisation de la libraire GD (vous l’avais-je déjà dit que j’en étais fan?) auxquelles on pense rapidement est la création d’une galerie de photos. En effet, il faut créer à la volée des miniatures et…
Et quoi? En réalité la librairie GD n’est pas la seule clef pour ouvrir la porte de la création de votre propre galerie, car à part pour la création des vignettes aussi customisée que l’on veut: GD n’est pas nécessaire.
Cette librairie est donc une pierre qui nous aidera dans notre édifice.
Partons donc à la recherche de ces autres pierres tout autant nécessaires…
Pour cela réfléchissons en termes de simplicité. J’ai envie, dans un premier temps, de mettre mes photos sur mon serveur ftp dans un même dossier et de laisser ma galerie gérer ces images.
Il me faut donc pouvoir lister toutes les fichiers du répertoire dans lequel se trouverait mon script. Pour faire cela, j’ai utilisé à mes débuts la fonction readdir() qui fonctionnait mais qui était assez lourde et pleine d’imbrications pour vérifier:
- Si le dossier soumis est bien un dossier
- Si le pointeur indique bien un fichier plutôt qu’un dossier ou pire: le dossier parent!
- Si le fichier est bien d’une extension reconnue par ma classe image.
- Avant de finalement bien refermer le pointeur sur le dossier
Puis, grâce à Yannick, j’ai découvert la fonction glob(). Cette fonction liste dans un tableau les chemins satisfaisants un masque. Ainsi, je peux émettre ma condition sur l’extension voulue directement via ma fonction de sélection!
Comme ceci:
-
span class= »st0″>’*.{jpg, jpeg, png, gif, JPG, JPEG, PNG, GIF}’
On remarquera l’utilisation du second paramètre pourtant optionnel mais qui, ici, indique la nécessité de prendre les fichiers ayant l’une de ces extensions.
Il suffira ensuite de passer en revue chaque fichier, créer une miniature et le tour est joué!
Pas si sur! En effet, on ne va pas créer à chaque fois des miniatures… On ne va pas non plus créer une miniature d’une miniature lorsque qu’on rafraichira le script.
Il est donc également important de faire quelques vérifications. Ainsi, il ne faudra pas prendre les fichiers commençant pas « mini_ » d’une part, et d’autre part checker pour chaque fichier blabla.jpg, si un fichier mini_blabla.jpg n’existe pas déjà avant de lancer la miniaturisation.Prêt? Alors allons-y!
-
span class= »st0″>’image.class.php’; //On charge notre classe personnelle de traitement d’images
-
-
/* On récupère la liste complète des images, et la réduite des miniature */‘*.{jpg, jpeg, png, gif, JPG, JPEG, PNG, GIF}’‘mini_*.{jpg, jpeg, png, gif, JPG, JPEG, PNG, GIF}’/* On trie afin de ne conserver QUE les originales *//* On passe en revue les photos pour créer les miniatures non existantes */‘mini_’//charge l’image originale
-
‘tailles’)->recadrer(100,100); //recadre l’image en 100×100
-
‘mini_’.$photo); //sauve la miniature
-
//vide le cache
-
-
}
-
/* On affiche la miniature pour chaque photo avec un lien vers la grande */‘ <a href="’.$photo.‘"><img src="mini_’.$photo.‘"></a> ‘
On enregistre, on uploade le fichier avec quelques photos bidons prises dans « mes images » puis on accède via la navigateur et là:
Il y a visiblement un petit problème… La quatrième image ne s’affiche pas!
A votre avis, pourquoi?
-
13 septembre 2008 à 19:02
la derniere image comporte des accents ? xD
13 septembre 2008 à 19:09
Vue que la dernière est « Nénuphars.jpg », je dirais la lettre accentuée :p
13 septembre 2008 à 23:04
Bingo! 🙂
Et vous préconisez quoi pour palier ce problème?
14 septembre 2008 à 1:30
utiliser rawurlencode dans le href & le img src