Page 1 sur 1

Affichage image aléatoire (plusieurs répertoires)

Posté : 04 juin 2008, 08:49
par fabrice88250
Bonjour,
J’ai un script qui me permet d'afficher aléatoirement les images d'un répertoire. Ce script scan le répertoire, génère une miniature au format x * y des images comprises dans le répertoire, et permet à l'internaute de faire afficher au format réel l'image lorsqu'il clique sur la miniature.
Se script fonctionne à merveille (sauf que de temps en temps il affiche un croix rouge au lieu d'une image) mais il n'affiche que les images d'un seul répertoire.

J'aimerai donc qu'il affiche les images des différents répertoires se trouvant dans mon répertoire images.

albums
|--Hver
|--insects
|--paysages
|--lacs
|-- ..............

Voici le script que j'utilise : pour le moment je donne le nom d'un répertoire choisi mais j'aimerai qu'il scan tous les répertoires qui sont dans le répertoire "images".
<?php 
    //On indique le dossier images 
    $chem_img = "../galerie/albums/Hiver"; 
    //On ouvre le dossier images 
    $handle  = opendir($chem_img); 
     
    //On parcoure chaque &eacute;l&eacute;ment du dossier 
    while ($file = readdir($handle)) 
        { 
            //Si les fichiers sont des images 
            if(preg_match ("!(\.jpg|\.jpeg|\.gif|\.bmp|\.png)$!i", $file)) 
                { 
                    $listef[] = $file; 
                } 
        } 
     
    $random_img = rand(0, count($listef)); //permet de prendre une image totalement au hasard (RANDom) parmi toutes les images trouv&eacute;es. 
     
    //On calcule la largeur et la hauteur de l'image al&eacute;atoire 
    $size = getimagesize($chem_img."/".$listef[$random_img]); 
     
    //Largeur maximale de l'image pour la cr&eacute;ation des miniatures 
    $largeur_maxi = 180; 
    //Si la largeur d&eacute;passe la limite autoris&eacute;e... 
    if ($size[0] > $largeur_maxi) 
        { 
            //...la nouvelle largeur est &eacute;gale &agrave; la limite &agrave; ne pas d&eacute;passer 
            $width = $largeur_maxi; 
            //La largeur d'origine divis&eacute;e par la largeur limit&eacute;e (on obtient un chiffre qui sert &agrave; faire la m&ecirc;me proportion pour la hauteur) 
            $theight = ($size[0]/$largeur_maxi); 
            //La hauteur originale est divis&eacute;e par le chiffre obtenu pr&eacute;c&eacute;demment afin que l'image conserve les m&ecirc;mes proportions que l'originale (mais en mode vignette) 
            $height = ($size[1]/$theight); 
        } 
    else 
        { 
            //Sinon on garde la taille originale 
            $width = $size[0]; $height = $size[1]; 
        } 
    //On affiche l'image aléatoire 
    echo "<a href=\"".$chem_img."/".$listef[$random_img]."\" onclick=\"window.open(this.href,'_blank');return false;\"><img style=\"border: none; width: ".$width."px; height: ".$height."px\" src=\"".$chem_img."/".$listef[$random_img]."\" alt=\"&copy; 2007 Photos Vosges\" /></a>"; 
    //On ferme le dossier 
    closedir($handle); 
?>
Voilà, si vous avez une idée pour améliorer le script dans mon sens ou si vous avez une autre solution je suis ouvert. Merci d'avance

Posté : 05 juin 2008, 00:19
par AB
Ben c'est le même principe pour lister les répertoire, sauf que tu fais l'opendir sur "../galerie/albums"; au lieu de le faire sur ""../galerie/albums/Hiver"; ensuite tu fais un is_dir() et tu agis en conséquence suivant qu'il s'agit d'un fichier ou d'un dossier. Cela revient à faire la boucle de lecture des images dans la boucle de lecture des répertoires.

Posté : 06 juin 2008, 09:30
par fabrice88250
bon sa ne fonctionne en partie avec is-dir.
en fait les images se trouvant directement de le repertoire s'affiche -->OK
par contre celles qui se trouve dans les sous repertoires s'affichent sous forme de croix rouge.
le nom de l'image est bien trouvé mais parcontre au niveau de l'affichage au lieu que le chemin de l'image (qui est dans le sous repertoire) soit : "images/panoramiques/panoramique-lac-truites.jpg"
j'ai "images/panoramique-lac-truites.jpg"
le nom du sous repertoire ne s'affiche pas et j'ai donc un croix rouge.
<?php 

    //On indique le dossier images  
$chem_img = ".";  
//On ouvre le dossier images  
$handle  = opendir($chem_img);  
      
//On parcoure chaque éléments du dossier  albums 
while ($file = readdir($handle))   
{   
//c'est un répertoire, on le parcourt 
if(is_dir($file)) { 
    $handle2=opendir($file); 
    while ($file2 = readdir($handle2))  { 
        if($file2 != "." && $file2 != "..") { 
            if(preg_match ("!(\.jpg|\.jpeg|\.gif|\.bmp|\.png)$!i", $file2))  {   
                 $listef[] = $file2;  
             }   
         }    
     } 
} 

//sinon c'est un fichier on le rentre dans l'array s'il remplit les conditions 
else { 
     if($file != "." && $file != "..") { 
         if(preg_match ("!(\.jpg|\.jpeg|\.gif|\.bmp|\.png)$!i", $file))  {   
                 $listef[] = $file;  
         } 
     }   
}  
}     
    $random_img = rand(0, count($listef)); //permet de prendre une image totalement au hasard (RANDom) parmi toutes les images trouv&eacute;es. 
     
    //On calcule la largeur et la hauteur de l'image al&eacute;atoire 
    $size = getimagesize($chem_img."/".$listef[$random_img]); 
     
    //Largeur maximale de l'image pour la cr&eacute;ation des miniatures 
    $largeur_maxi = 180; 
    //Si la largeur d&eacute;passe la limite autoris&eacute;e... 
    if ($size[0] > $largeur_maxi) 
        { 
            //...la nouvelle largeur est &eacute;gale &agrave; la limite &agrave; ne pas d&eacute;passer 
            $width = $largeur_maxi; 
            //La largeur d'origine divis&eacute;e par la largeur limit&eacute;e (on obtient un chiffre qui sert &agrave; faire la m&ecirc;me proportion pour la hauteur) 
            $theight = ($size[0]/$largeur_maxi); 
            //La hauteur originale est divis&eacute;e par le chiffre obtenu pr&eacute;c&eacute;demment afin que l'image conserve les m&ecirc;mes proportions que l'originale (mais en mode vignette) 
            $height = ($size[1]/$theight); 
        } 
    else 
        { 
            //Sinon on garde la taille originale 
            $width = $size[0]; $height = $size[1]; 
        } 
    //On affiche l'image al&eacute;atoire (en respectant les standards ! :) ) 
    echo "<a href=\"".$chem_img."/".$listef[$random_img]."\" onclick=\"window.open(this.href,'_blank');return false;\"><img style=\"border: none; width: ".$width."px; height: ".$height."px\" src=\"".$chem_img."/".$listef[$random_img]."\" alt=\"&copy; 2007 Photos Vosges\" /></a>"; 
    //On ferme le dossier 
    
	closedir($handle2); 
	closedir($handle); 
?>
sa fait 3 jours que je suis dessus... :evil: