Affichage de photos

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Affichage de photos

par Ryle » 11 mars 2009, 15:38

T'as des choses bizares dans ton code...

déjà, que contient ta variable $id ? Si c'est le numéro de l'image à ouvrir alors tout ceci est inutile :
// fonction de séparation de l'extention 
function im_numero($id) 
{ 
list($nomphoto) = explode(".", $id); 
$id = ($nomphoto); 
return($id); 
} 
$numero_image= im_numero($id); 
en effet, tout ceci ne te retournera que la valeur de l'id :)

A noter également qu'il n'est pas nécessaire de mettre des chaines vides de part et d'autre d'une variable ;)
echo ''.($id-1).'';
// ou 
echo ($id-1);
auront le même effet... autant ne pas surcharger ton code quand ce n'est pas nécessaire :)

Par ailleurs, tu affiches une image en spécifiant uniquement l'id sans l'extension.. doit donc y avoir un jolie croix rouge :
<img src="grand/<?php echo ''.$id.'';?>">
De plus, il n'est pas nécessaire de parcourir un dossier pour vérifier si un fichier dont tu connais le nom et l'emplacement existe :) Ceci est donc inutile :
if ($dh = opendir($dir)) { 
        while (($file = readdir($dh)) !== false) { // tu boucles sur tous les éléments du dossier
        if($file=='.') continue; 
        if($file=='..')continue; 
        if($file=='miniature')continue; 
        } // et quand tu as terminé de boucler, tu continues ton code sans te préoccuper des fichiers trouvés... ca a donc un intérêt des plus limité ;)

Je pense que tu peux faire un peu de ménage... ca rendra ton code plus clair, tu pourras ainsi mieux le comprendre et plus facilement identifier et corriger les problèmes que tu pourrais rencontrer :)

Affichage de photos

par mars77 » 10 mars 2009, 23:11

Boujour à tous,

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"  />&nbsp;&nbsp;<span class="titre">Montée au Folly en peau</span>&nbsp;&nbsp;<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.