Faire une galerie d'images - PHP

De UnixManiax
Aller à : navigation, rechercher


Introduction

Il existe plein de sites sur le web qui proposent des scripts pour faire une gallerie d'images. La plupart utilisent des bases de données pour faire de superbes galleries ou chaque image peut avoir un commentaire. Ca permet aussi d'afficher les images sur plusieurs pages. Bref, c'est très bien, mais il faut savoir utiliser les bases de données, et c'est long à coder et à mettre en place.

Ce que je voulais, c'était simplement mettre toutes mes images dans un répertoire, toutes les vignettes (ou miniatures) dans un sous-répertoire, et que mon script php m'affiche toutes les vignettes les unes à la suite des autres, avec pour chaque vignette, un lien vers la "grande" image.

Comme je n'ai trouvé aucun sript simple et sans fioritures capable de faire ça, et ben je l'ai écrit moi-même ! On n'est jamais mieux servi que par soit même qu'on dit Smiley-dents.gif

Une dernière chose : php est capable de créer tout seul les vignettes à partir des grandes images, mais dans ce cas, il va le faire à chaque fois que la page est chargée. Comme en php c'est le serveur qui bosse, et pas l'odinateur sur lequel vous êtes, si tout le monde fait de tels scripts, on peut vite charger le serveur, ce qui va ralentir les connexions et pénaliser tout le monde. C'est pour cette raison que je préfère créer mes vignettes moi-même, ça ne prend pas longtemps si on utilise un logiciel qui redimentionne les images par lot (par exemple xnview sous windows ou Kde Image Menu sous linux).


Exemple

Avant d'aller plus loin, voyons tout de suite un exemple d'utilisation du script, pour voir ce que ça donne. Il y a justement une page qui utilise ce script, et elle est là : wallpapers.php.

Comme vous pouvez le voir, toutes les miniatures sont mises les unes à la suite des autres, dans l'espace qui leur est réservé. Et si on agrandi ou on réduit la fenêtre du navigateur, elles bougent avec pour s'adapter, comme un simple texte.


Fonctionnement du script

On commence par initialiser deux variables : $Directory contient le nom du répertoire ou se trouve les images ; $Thumbs contient le nom du sous-répertoire dans lequel il y a les miniatures. Les miniatures doivent obligatoirement se trouver dans un sous-répertoire du répertoire des images. Le répertoire des images ne doit contenir que des images et le sous-répertoire des miniatures, sinon ça risque de faire n'importe quoi (pour les personnes sous windows, le script élimine tout seul le fichier Thumbs.db qui est généré automatiquement par windows).

Les miniatures doivent obligatoirement avoir le même nom que les images vers lesquelles elle pointent.

Ensuite, le script va scruter les deux répertoires, et va afficher toutes les miniatures en mettant à chaque fois le lien vers l'image du même nom.

Et c'est tout !


Le code

<?
$Directory="./images/wallpapers";
$Thumbs="miniatures";

if (is_dir($Directory) && is_readable($Directory))
{
    if ($MyDirectory = opendir($Directory))
    {
        while($Entry = readdir($MyDirectory))
        {
            if (($Entry != ".") && ($Entry != "..") && ($Entry != "$Thumbs") && ($Entry != "Thumbs.db"))
            {
            echo '<a href="'."$Directory/$Entry".'"><img alt="'."$Entry".'" src="'."$Directory/$Thumbs/$Entry".'" /></a> ';
            }
        }
    closedir($MyDirectory);
    }
}
?>


Remarques

Pour adapter le code à votre cas, il vous suffit simplement de modifier les deux variables au départ. De plus, ce code est tellement court et simple, que vous pouvez facilement le modifier, à condition d'avoir juste quelques notions de html et éventuellement de programmation.