Galerie d'image

Résolu
darknessneo Messages postés 45 Date d'inscription samedi 6 novembre 2004 Statut Membre Dernière intervention 9 septembre 2007 - 26 mai 2007 à 14:27
darknessneo Messages postés 45 Date d'inscription samedi 6 novembre 2004 Statut Membre Dernière intervention 9 septembre 2007 - 27 mai 2007 à 17:29
Bonjours à tous.
Je vais aller tout de suite dans le vif du sujet. J'ai cherché partout un script pour une galerie d'image, mais aucunes ne me convenait à 100%
J'avais lus des 100taines de coms tout script et site confondu. Pleins de gens ce plaignent. Et les réponses sont toujours les mêmes. Si t'es pas content, fais ton propre script au lieu de critiqué. Bon c'est ce que je fais...

Mon niveau est... presque 0...
disons 1.5... aller...

Bon, voila ce que je voulais:

Dans une page manga.php, s'affiche un tableau avec dans une cellule un include.
Dans cet include, afficher une liste qui va lire automatiquement dans un répertoire image tout les sous répertoires.
Si on part du principe que je fasse un répertoire manga, les sous répertoires seraient du genre: naruto/ ; dragonBallZ/; Evangelion/, Priest/; Bleach, enfin, vous avez compris l'idée. Le but est simple, quand j'ai un nouveau manga, je rajoute simplement le dossier avec les images dans le répertoire manga, et ma liste s'actualise toute seule.

La liste doit biensur générer les liens hypertext vers les sous répertoires.
Quand on clic sur un lien on charge alors les images toujours dans le meme include. Les images seraient sous forme de miniature.
on afficherait également la taille de l'image, sa résolution et pourquoi pas le nombre de hits de l'image.
Biensur, si le dossier comporte plus de 300 images, ce qui est le cas de certains dossiers, il faudrait afficher un nombre max d'images dans l'include en générant alors des pages pour afficher les images suivantes...

Voila mon projet.
Quand on est nul en php et qu'on veut faire ça... on a pas trop le choix...
Faut se lancer...
Mais pour ça faut qu'on nous mette sur le droit chemin... sinon on fonce dans le ravin...

Ce que j'ai fais aujourd'hui:

Mon projet était impossible pour moi. Mais une personne ma aidée, qui vient parfois ici.
Et voila ce que j'ai:
mon script génére la liste des sous répertoires dans mon répertoire manga. La liste est sous forme de lien.
Quand le clic sur un lien, il m'ouvre une page index se trouvant dans le répertoire choisi.

La page index quand à elle s'occupe de parcourir le dossier en sélectionnant uniquement les images.
Quand il tombe sur une image (jpg, gif ou png) il vérifie si le dossier tb existe. S'il n'existe pas, il le creer, ensuite, il verifie s'il existe deja une miniature dans le répertoire tb de l'image en question, si elle n'existe pas, il la creer, ensuite, il affiche la miniature avec un lien vers l'image reelle en target blank.
J'ai limité les images à raison de 5 images par lignes et 4 colonnes, ce qui fait un total de 20 images. Si le dossier en comporte plus, il ne les affiches pas. Il affiche le nombre d'image affiché, et le nombre d'image réel que contient le dossier (mais ca c'est pour mes phases de test).

Donc ce qui me manque aujourd'hui:
générer un tableau avec mes images à l'interieur afin de facilité la mise en page (actuellement mes images sont collées les unes aux autres)
puis, générer des pages si le dossier comporte plus de 20 images.

Les plus:
Quand j'aurais fini tout ça, je pourrais ensuite améliorer le script avec:
<li>Optimiser mon script car il est tres maladroitement ecrit.
</li><li>dans la liste comportant tout les dossiers images, afficher pour chaque dossier le nombre d'image qu'il contient.</li><li>afficher le nombre de hits par images.</li><li>permettre aux visiteurs de parametrer l'affichage des images (nombre par lignes et le nombre de colonnes par page).</li>Mes codes (vraiment pas optimisés, car je suis un 0 .. euh.. 1.5 en php)

Une page bidon pour afficher l'include dans le tableau. (a noter qu'il faut l'appeler avec ?page=...php) on va appeler cette page: bidon.php et on l'ouvrira ainsi: bidon.php?page=explorerbeta4.php
Ici vous pouvez lancer tout les scripts présents dans le site:,
----

<?php
$page = $_GET['page'];
include("$page.php");
?>

La page explorerbeta4.php

<?php
function filelist ($startdir="./", $searchSubdirs=1, $directoriesonly=0, $maxlevel="all", $level=1) {
$ignoredDirectory[] = ".";
$ignoredDirectory[] = "..";
$ignoredDirectory[] = "_vti_pvt";
$ignoredDirectory[] = "_vti_cnf";
$ignoredDirectory[] = "_private";
global $directorylist;
if (is_dir($startdir)) {
if ($dh = opendir($startdir)) {
while (($file = readdir($dh)) !== false) {
if (!(array_search($file,$ignoredDirectory) > -1)) {
if (filetype($startdir . $file) == "dir") {
$directorylist[$startdir . $file]['dir'] = 1;
$directorylist[$startdir . $file]['name'] = $file;
}}}
closedir($dh);
}}
return($directorylist);
}
$files = filelist("images/",1,1);
foreach ($files as $list) {
echo "[ . $dir . $file . ]";
$nombreimage ++;
$intervalle ++;
if ($intervalle == $lmax) {
$nbligne ++;
echo "
";
$intervalle = 0;
}}}}
closedir($dh);
}}
echo "
Nombre d'images affichées : " . $nombreimage;
echo "
nombre d'images total : " . count(glob($dir . 'tb/*'))
?>

</html>

Voila, cette page génére le répertoire TB pour les miniatures, ainsi que les miniatures si elles n'existent pas. Ensuite elle les affiches.
J'ai limité cette affichage à raison de 5 images par lignes et pour un total de 4 colonnes.

BIen sur, il serait plus propre de faire des boucles whiles pour mes renvois de ligne. mais le plus important c'est que pour le moment tout fonctionne correctement.

Maintenant vous voyez ce qui me reste à faire. J'ai besoin d'aide now...

Désolé pour le post mega long...

7 réponses

darknessneo Messages postés 45 Date d'inscription samedi 6 novembre 2004 Statut Membre Dernière intervention 9 septembre 2007
27 mai 2007 à 17:29
oops !!!
je viens de test mon script sur le server de mon site car tout mes tests étaient en local... eh bien comme je le pensais c'était pas concluant...
En effet la fonction glob() marche nickel en local mais cela est une autre paire de manche sur les servers. Cette fonction a été déactivée sur de nombreux sites pour cause de sécurité. J'ai du donc trouver un truc pour récuprer le nombre de fichier max... et donc voici la derniere version de mon code:
<?php
$totalimg = 0;
$page = str_replace('index', '', $_GET['page']); // on recupere le chemin du fichier index et on enleve index du nom pour en avoir que le chemin repertoire
$dir = $page;
if (is_dir($dir)) {
if ($dh = opendir($dir)) {
while (($file = readdir($dh)) !== false) {
$totalimg ++;
}}
closedir($dh);
}
$totalimg = $totalimg - 4;
if (isset($_GET['id'])) // le id permet de faire savoir à la page index quelle page on affiche
$id = $_GET['id'];
else
$id = 1; // si l'id ne contient rien, il s'agit alors de la premiere page
$lmax = 5; // nombre d'image par ligne
$hmax = 4; // nombre de colonnes max par page
$nbpagemax = ceil($totalimg / ($lmax * $hmax)); //on calcul le nombre de page max
function miniature($picture,$rep,$fext) // début de la fonction qui genere les miniatures
{
if (file_exists($rep . \"tb/mini_\" . $picture) == false) {if ($fext \"jpg\") { $source imagecreatefromjpeg($rep . $picture);}elseif ($fext \"gif\") { $source imagecreatefromgif($rep . $picture);}
else { $source = imagecreatefrompng($rep . $picture);}
$destination = imagecreatetruecolor(200, 150); // On crée la miniature vide
$largeur_source = imagesx($source);
$hauteur_source = imagesy($source);
$largeur_destination = imagesx($destination);
$hauteur_destination = imagesy($destination);
imagecopyresampled($destination, $source, 0, 0, 0, 0, $largeur_destination, $hauteur_destination, $largeur_source, $hauteur_source);
imagejpeg($destination, $rep . 'tb/mini_' . $picture);
}
} //fin de la fonction
$page = str_replace('index', '', $_GET['page']); // on recupere le chemin du fichier index et on enleve index du nom pour en avoir que le chemin repertoire
$dir = $page;
if (file_exists($dir . \"tb/\") == false) { //on verifie ensuite si on possede un dossier tb dans le dossier image
mkdir ($dir . \"tb/\", 0777); // si ce nest pas le cas, on creer le dossier
}
if ($id > 1)
$nombreimage = ($id - 1) * ($lmax * $hmax); //si ID est superieur a 1 on reprend le compte de la variable la ou elle en etait
else
$nombreimage = 0;
$verifnbimg = 0;
$intervalle = 0;
$nbligne = 0;
$nbpage = 1;
// 2 a la variable, ce qui correspond au fichier index et le repertoire tb, attention tout de meme a ne pas avoir de fichier thunbs.db dans
//le repertoire sous peine de fausser le compte
if (is_dir($dir)) {
if ($dh = opendir($dir)) {
while (($file = readdir($dh)) !== false) {
$ext= explode('.',$file); // on recupere l extension du fichier en prenant la derniere chaine de texte apres le dernier point du fichier
$ext=array_pop($ext);if ($ext \"jpg\" OR $ext \"gif\" OR $ext == \"png\"){ // si l extension est une image alors on excute la partie de code qui suitif ($nbligne !$hmax AND $verifnbimg $nombreimage AND $nombreimage <= $id * ($lmax * $hmax)) { //on verifie qu on affiche bien les images en fonction de la page
miniature($file, $dir, $ext); // on verifie avec la fonction que la miniature du fichier existe, sinon on la creer
//les lignes qui suivent affiches les miniatures, son nom, son extension et sa tailleif ($ext \"jpg\") { $source imagecreatefromjpeg($dir . $file);}elseif ($ext \"gif\") { $source imagecreatefromgif($dir . $file);}
else { $source = imagecreatefrompng($dir . $file);}
echo \"

Nom: " . str_replace("." . $ext, '', $file) . "

taille : " . ceil(filesize($dir . $file)/1000) . " Ko

" . imagesx($source) . " x " . imagesy($source) . ", \";
//fin de l affichage des miniatures
if ($nombreimage < $totalimg) {
$nombreimage ++;
}
$intervalle ++;
// cette ligne permet de passer a la colonne suivante apres avoir affiche x images
if ($intervalle == $lmax) { $nbligne ++; echo \"----
\"; $intervalle = 0; }
}
$verifnbimg ++;
}}
closedir($dh);
}
}
// maintenant on va creer autant de page qu'il faudra pour afficher toutes les images
if ($nbpagemax > 1) { // si le nombre d image ne depasse pas le nombre max par page il est inutile d afficher les pages
echo \"----
Pages";
while ($nbpage < $nbpagemax) {
echo " " . $nbpage . ",";
$nbpage++; }
echo " " . $nbpage; } // on repete encore une fois l instruction avant d afficher la
// derniere page pour eviter de mettre la , a la fin du dernier numero
echo "----, images : \" . $nombreimage . \"/\" . $totalimg . \"</td>\";
//petit plus, on affiche combien d'image est affiché par rapport au nombre max du dossier
?>
3
amezghal Messages postés 385 Date d'inscription lundi 27 février 2006 Statut Membre Dernière intervention 21 août 2015 5
26 mai 2007 à 15:55
salut:
c'est un cahier de charge ça






<hr size="2" width="100%" />Au début, on essaye de trouver une solution qui marche, et puis on cherche la meilleure solution.
0
darknessneo Messages postés 45 Date d'inscription samedi 6 novembre 2004 Statut Membre Dernière intervention 9 septembre 2007
26 mai 2007 à 20:21
Oui, hehe je voulais que tout soit clair et précis car c'est pas facile d'expliquer avec des mots.
Mes progres:
j'ai réussi a faire mon tableau qui s'adapte au nombre d'image.
Dans chaque cellule du tableau j'affiche le nom sous l'image, ainsi qu'une petite icone pour donner l'extension du fichier. Maintenant je cherche comment afficher la résolution de l'image ainsi que la taille.

Je chercherais à la fin comment gérer un systeme de pagination pour ne pas encombrer la page.
si une personne veut m'aider avant que je trouve un a un chaque element
a plus.
0
darknessneo Messages postés 45 Date d'inscription samedi 6 novembre 2004 Statut Membre Dernière intervention 9 septembre 2007
27 mai 2007 à 01:31
ok, j'ai trouvé une fonction très simple pour afficher la taille du fichier. C'était tellement simple que j'ai cru revé! maintenant, je cherche comment générer des pages avec mes miniatures. j'attends toujours votre aide
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
amezghal Messages postés 385 Date d'inscription lundi 27 février 2006 Statut Membre Dernière intervention 21 août 2015 5
27 mai 2007 à 02:15
renseigne toi , sur la bibliothèque gd_2,
http://fr.php.net/manual/fr/ref.image.php

<hr size="2" width="100%" />Au début, on essaye de trouver une solution qui marche, et puis on cherche la meilleure solution.
0
darknessneo Messages postés 45 Date d'inscription samedi 6 novembre 2004 Statut Membre Dernière intervention 9 septembre 2007
27 mai 2007 à 11:45
J'avais trouvé deja le imagex et imagey, mais malheureusement cela une fonctionne pas dans mon cas, si je met l'image dans les parentheses, j'ai une erreur. on ne peut récuperer les dimensions seulement si on creer une image, car à ce moment la la variable contient une image, et non pas une chaine... a moins de pouvoir convertir une chaine en source image... mais comment... enfin... j vais  continuer a lire toute la page, defois que...
0
darknessneo Messages postés 45 Date d'inscription samedi 6 novembre 2004 Statut Membre Dernière intervention 9 septembre 2007
27 mai 2007 à 11:59
ha, ben c bon, j'ai réglé le probleme. J'ai fais ceci:
if ($ext "jpg") { $source imagecreatefromjpeg($dir . $file);}elseif ($ext "gif") { $source imagecreatefromgif($dir . $file);}
else { $source = imagecreatefrompng($dir . $file);}

enfaite c'est la partie de la fonction qui récupere les dimensions de l'image d'origine.
Donc j'ai recopié cette partie et je l'ai intégré à l'endroit où j'affiche les images. Ensuite, pour afficher la résolution je n'avais plus qu'a utiliser imagex et image y.

Simple finalement... Enfaite j'ai quasiement fini mon code et cela, presque tout seul... je n'aurais jamais cru etre capable de faire ca...

Si une personne veut bien m'aider à purger mon code des erreurs:

<style type=\"text/css\">
<!--
.Style1 {font-size: 10px}
-->
</style>
<?php
if (isset($_GET['id'])) // le id permet de faire savoir à la page index quelle page on affiche
$id = $_GET['id'];
else
$id = 1; // si l'id ne contient rien, il s'agit alors de la premiere page
$lmax = 5; // nombre d'image par ligne
$hmax = 4; // nombre de colonnes max par page
function miniature($picture,$rep,$fext) // début de la fonction qui genere les miniatures
{
if (file_exists($rep . \"tb/mini_\" . $picture) == false) {if ($fext \"jpg\") { $source imagecreatefromjpeg($rep . $picture);}elseif ($fext \"gif\") { $source imagecreatefromgif($rep . $picture);}
else { $source = imagecreatefrompng($rep . $picture);}
$destination = imagecreatetruecolor(200, 150); // On crée la miniature vide
$largeur_source = imagesx($source);
$hauteur_source = imagesy($source);
$largeur_destination = imagesx($destination);
$hauteur_destination = imagesy($destination);
imagecopyresampled($destination, $source, 0, 0, 0, 0, $largeur_destination, $hauteur_destination, $largeur_source, $hauteur_source);
imagejpeg($destination, $rep . 'tb/mini_' . $picture);
}
} //fin de la fonction
$page = str_replace('index', '', $_GET['page']); // on recupere le chemin du fichier index et on enleve index du nom pour en avoir que le chemin repertoire
$dir = $page;
if (file_exists($dir . \"tb/\") == false) { //on verifie ensuite si on possede un dossier tb dans le dossier image
mkdir ($dir . \"tb/\", 0777); // si ce nest pas le cas, on creer le dossier
}
if ($id > 1)
$nombreimage = ($id - 1) * ($lmax * $hmax); //si ID est superieur a 1 on reprend le compte de la variable la ou elle en etait
else
$nombreimage = 0;
$verifnbimg = 0;
$intervalle = 0;
$nbligne = 0;
$nbpage = 1;
$nbpagemax = (ceil(count(glob($dir . '*')) - 2)/($hmax*$lmax)); //on compte le nombre de fichier max dans le repertoire image en enlevant 2 a la variable, ce qui correspond au fichier index et le repertoire tb, attention tout de meme a ne pas avoir de fichier thunbs.db dans le repertoire sous peine de fausser le compte
if (is_dir($dir)) {
if ($dh = opendir($dir)) {
while (($file = readdir($dh)) !== false) {
$ext= explode('.',$file); // on recupere l extension du fichier en prenant la derniere chaine de texte apres le dernier point du fichier
$ext=array_pop($ext);if ($ext \"jpg\" OR $ext \"gif\" OR $ext == \"png\"){ // si l extension est une image alors on excute la partie de code qui suitif ($nbligne !$hmax AND $verifnbimg $nombreimage AND $nombreimage <= $id * ($lmax * $hmax)) { //on verifie qu on affiche bien les images en fonction de la page
miniature($file, $dir, $ext); // on verifie avec la fonction que la miniature du fichier existe, sinon on la creer
//les lignes qui suivent affiches les miniatures, son nom, son extension et sa tailleif ($ext \"jpg\") { $source imagecreatefromjpeg($dir . $file);}elseif ($ext \"gif\") { $source imagecreatefromgif($dir . $file);}
else { $source = imagecreatefrompng($dir . $file);}
echo \"

Nom: " . str_replace("." . $ext, '', $file) . "

taille : " . filesize($dir . $file)/1000 . "ko

" . imagesx($source) . " x " . imagesy($source) . ", \";
//fin de l affichage des miniatures
if ($nombreimage < count(glob($dir . 'tb/*')))
$nombreimage ++;
$intervalle ++;
if ($intervalle == $lmax) { $nbligne ++; echo \"----
\"; $intervalle = 0; } // cette ligne permet de passer a la colonne suivante apres avoir affiche x images
}
$verifnbimg ++;
}}
closedir($dh);
}
}
// maintenant on va creer autant de page qu'il faudra pour afficher toutes les images
if ($nbpagemax > 1) { // si le nombre d image ne depasse pas le nombre max par page il est inutile d afficher les pages
echo \"----
Pages";
while ($nbpage < $nbpagemax) {
echo " " . $nbpage . ",";
$nbpage++; }
echo " " . $nbpage; } // on repete encore une fois l instruction avant d afficher la derniere page pour eviter de mettre la , a la fin du dernier numero
echo "----, images : \" . $nombreimage . \"/\" . (count(glob($dir . '*')) - 2) . \"</td>\"; //petit plus, on affiche combien d'image est affiché par rapport au nombre max du dossier
?>
0
Rejoignez-nous