Affichage de photos
Posté : 10 mars 2009, 23:11
Boujour à tous,
J'ai créé pour mon site une galerie photo qui tourne avec le code suivant.
Mon problème c'est que quand je clique sur la photo en miniature ce n'est pas la bonne photo qui s'affiche en grand .
Si j'ai moins de 10 photos cela fonctionne et si j'ai plus de 10 photos certaine photo ne sont pas les même entre la miniature et celle en grand.
J'ai numéroté mes photos de 1.jpeg, 2.jpeg ainsi de suite est ce que c'est à cause de cela ?
Merci à celui qui pourra m'aider.
J'ai créé pour mon site une galerie photo qui tourne avec le code suivant.
<?php
error_reporting(E_ALL | E_STRICT);
define ("NBRE_COLONNES", 4);
$types_ok = array ('image/jpeg', 'image/gif', 'image/png');
$tabl_exclus = array ('.', '..', 'miniature');
$tabl_liens = array();
//fonction pour renommer les photos
function renommer_photo($dir) {
if ($handle = opendir($dir)) {
while (($file = readdir($handle)) != false) {
$chemin_fichier = $dir.'1.jpeg';
if (!file_exists($chemin_fichier)){
$cpt = 0;
if ($handle = opendir($dir)) {
while (($file = readdir($handle)) !== false) {
if($file=='.') continue;
if($file=='..')continue;
$cpt++; // on incrémente le compteur
$extension = '.jpeg';
rename($dir . $file,$dir. $cpt. $extension);
}
}
closedir($handle);
}
}
}
}
// Parcours le répertoire courant et tout ses sous-répertoires récursivement.
function liste_repertoire($dir) {
if ($handle = opendir($dir)) {
while (($file = readdir($handle)) !== false) {
$chemin_fichier = $dir.'/'.$file;
if (is_dir($chemin_fichier)) {
if (!in_array($file, $GLOBALS['tabl_exclus'])) {
liste_repertoire($dir.'/'.$file);
}
} else {
if (est_image($chemin_fichier)) {
$chemin_miniature = $dir.'/miniature/'.$file;
if (!file_exists($chemin_miniature)) {
genere_miniature($dir, $chemin_fichier, $chemin_miniature);
}
ajoute_lien($chemin_fichier, $chemin_miniature, $file);
}
}
}
closedir($handle);
}
}
// Teste si le fichier passé en paramètre correspond à l'un des trois type d'image défini
function est_image($chemin_fichier) {
if (list($GLOBALS['largeur'], $GLOBALS['hauteur'], $type) = getimagesize($chemin_fichier)) {
$type = image_type_to_mime_type($type);
if (in_array($type, $GLOBALS['types_ok'])) {
$ext = explode("/", $type);
$GLOBALS['extension'] = $ext[1];
return true;
}
}
return false;
}
// Génère la miniature de l'image dans le sous-répertoire 'miniature' si elle n'existe pas déjà
function genere_miniature($dir, $chemin_image, $chemin_miniature) {
// Calcul du ratio entre la grande image et la miniature
$taille_max = 100;
if ($GLOBALS['largeur'] <= $GLOBALS['hauteur']) {
$ratio = $GLOBALS['hauteur'] / $taille_max;
} else {
$ratio = $GLOBALS['largeur'] / $taille_max;
}
// Définition des dimensions de la miniature
$larg_miniature = $GLOBALS['largeur'] / $ratio;
$haut_miniature = $GLOBALS['hauteur'] / $ratio;
// Crée la ressource image pour la miniature
$destination = imagecreatetruecolor($larg_miniature, $haut_miniature);
// Retourne un identifiant d'image jpeg, gif ou png
$source = call_user_func('imagecreatefrom'.$GLOBALS['extension'], $chemin_image);
// Redimensionne la grande image
imagecopyresampled( $destination,
$source,
0, 0, 0, 0,
$larg_miniature,
$haut_miniature,
$GLOBALS['largeur'],
$GLOBALS['hauteur']);
// Si le répertoire de miniature n'existe pas, on le crée
if (!is_dir($dir.'/miniature')) {
mkdir ($dir.'/miniature', 0700);
}
// Ecriture physique de l'image
call_user_func('image'.$GLOBALS['extension'], $destination, $chemin_miniature);
// Détruit les ressources temporaires crées
imagedestroy($destination);
imagedestroy($source);
}
// Crée le lien dans le tableau global
function ajoute_lien($chemin_image, $chemin_miniature, $file) {
// Récupère la taille de la miniature sous forme HTML (width="xxx" height="yyy")
$taille_html_miniature = getimagesize($chemin_miniature);
$taille_html_miniature = $taille_html_miniature[3];
// Rajoute le lien vers l'image au tableau global $GLOBALS['tabl_liens']
$lien = "<a href=affichage_grand.php?action=afficher&id=$file>";
$lien .= '<img src="'.$chemin_miniature.'" '.$taille_html_miniature.' alt="'.$file.'">';
$lien .= '</a>'."\n";
array_push($GLOBALS['tabl_liens'], $lien);
}
// Gère l'affichage du tableau $GLOBALS['tabl_liens']
function affichage() {
$compteur = 1;
foreach ($GLOBALS['tabl_liens'] as $val_lien) {
if ($compteur % NBRE_COLONNES == 1) {
echo '<br>';
}
echo $val_lien;
$compteur++;
}
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Affichage images</title>
<style type="text/css">
<!--
a img {
border-color:transparent;
}
-->
</style>
</head>
<body>
<?php
include("../../mise_en_page_haut_photo.php");
?>
<br />
<img src="../../image/titreg.jpg" /> <span class="titre">Montée au Folly en peau</span> <img src="../../image/titre.jpg" />
<hr align="center" width="550" size="1" color="#0099FF"><br />
<?php
renommer_photo('grand/');
liste_repertoire('.');
affichage();
?>
<br><br><br>
<hr align="center" width="550" size="1" color="#0099FF"><br />
<?php
include("../../mise_en_page_bas_photo.php");
?>
</body>
</html>
et j'affiche les photos en grand avec ceci.
<?php
include("../../mise_en_page_haut_photog.php");
include ("../../include/confige.php");
?>
<link href="../../style.css" rel="stylesheet" type="text/css" />
<?php
if(isset($_GET['id'])){
$id=$_GET['id'];
if(isset($_GET['action'])) {
$action=$_GET['action'];
if($action=='afficher'){
// fonction de séparation de l'extention
function im_numero($id)
{
list($nomphoto) = explode(".", $id);
$id = ($nomphoto);
return($id);
}
$numero_image= im_numero($id);
?>
<hr align="center" width="750" size="1" color="#0099FF">
<table width="750">
<tr><td width="100" >
<?php
if($numero_image=="1")
{
echo'';
}
else
{
?>
<a href="affichage_grand.php?action=afficher&id=<?php echo ''.($id-1).'';?>.jpeg"class="lienphoto"><img src="../gauche.jpg" border="0" align="absmiddle" /><br />
Photo précédente</a>
<?php
}
?>
</td>
<td width="450" align="center" >
<a href="index.php" class="mm2">Retour à l'index </a></td><td width="100" align="right" valign="top">
<?php
$dir = "grand/";
$photo ='grand/'.($id+1).'.jpeg';
// Ouvre un dossier bien connu, et liste tous les fichiers
if (is_dir($dir)) {
if ($dh = opendir($dir)) {
while (($file = readdir($dh)) !== false) {
if($file=='.') continue;
if($file=='..')continue;
if($file=='miniature')continue;
}
if (file_exists($photo)){
?>
<a href="affichage_grand.php?action=afficher&id=<?php echo ''.($id+1).'';?>.jpeg" class="lienphoto" ><img src="../droite.jpg" border="0" /><br />
Photo suivante</a>
<?php
}
else
{
echo"existe pas";
}
closedir($dh);
}
}
?>
</td></tr></table>
<hr align="center" width="750" size="1" color="#0099FF">
<a href="<?php echo ''.$id.'';?>"" class="bleu"><img src="grand/<?php echo ''.$id.'';?>"></a><br><br>
<?php
include("../../mise_en_page_bas_photog.php");
}
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>La Passion Parapente</title>
</head>
Mon problème c'est que quand je clique sur la photo en miniature ce n'est pas la bonne photo qui s'affiche en grand .
Si j'ai moins de 10 photos cela fonctionne et si j'ai plus de 10 photos certaine photo ne sont pas les même entre la miniature et celle en grand.
J'ai numéroté mes photos de 1.jpeg, 2.jpeg ainsi de suite est ce que c'est à cause de cela ?
Merci à celui qui pourra m'aider.