Script de gallerie photo

Script de gallerie photo - PHP - Programmation

Marsh Posté le 09-08-2006 à 13:31:29    

Bonjour
 
Je travaille actuellement sur un site internet dans le cadre d'un stage (je precise que ce n'est pas du tout en rapport avec ma formation de base :D )
 
Une part du site (dans le domaine du tourisme, sport nautique) est basé sur gallerie de photo.
 
J'ai adapter un script libre de droit , E Pictures pour mon utilisation, mais je suis loin d etre une vedette en PHP, je connais les bases, mais des qu'il s'agit de mettre des fichier dans les variables  :ouch:  
 
L'adaptation du script de base se fait dans le sens de la simplification (ouf),  
 
Pour l'heure, le script detecte les fichier du repertoire (du moins leur nombres...), ne semble pas créer de miniature, mais genere un lien, et la page du lien marche au poil (affichage de l'image source taille reel)
 
La gallerie de test uploadée : http://mystik23.free.fr/windsurfvi [...] yotest.php
 
voici les sources :
 
yotest.php :
 

Citation :


<html>
<body>
 
<?
 
 function isImg ($file) //verifie que les fichiers sont des images
{
 
  $file = explode(".",$file);
  if($file[1] == "jpg" || $file[1] == "gif" || $file[1] == "png" ){
    return true;
  }else{
    return false;
  }
 
}
 
 
     // loop dans les fichiers pour trouver les images et les enregistrer dans une variable tableau
     $handle = opendir("action" );
     while (false !== ($file = readdir($handle))) {
         if ($file != "." && $file != ".." && $file != "img" && $file != "sys" && $file != "small" && isImg($file)) {
         $imgList[] = $file;  //imglist contient toute les images
         }
      }
      closedir($handle);
 
 
//affiche en tableau
 
    $i = 0;
 $nbimg = count($imgList);
 
   if($nbimg>0)
{
   echo "<table>";
 
            for($i=0;$i<$nbimg;$i++)
   {
           if($i%4==0)//4 : nb de colonne
       echo '<tr>';
       echo '<td>',"<a href=\"img.php?img=action/$imgList[$i]\">
       <img src=\"SmallImgCache.php?imgPath=action/$imgList[$i]&Height=150\"
    border=\"0\" height=\"150\"></a>",'</td>' ;
 
       if($i%4==3)
       echo '</tr>';
 
      }
 
    echo "</table>";
}
?>
</body>
</html>
 


 
img.php :
 

Citation :

<?
 
# Programme img.php
# Auteurs : Sylvain «CID» Filteau et Emmanuel Pierrez
 
# Afficher l'image en taille maximale
 
//include("sys/systemfiles.php" );
?>
<html>
<div align="center">
 <br/>
     <img src="<? echo $_GET['img']; ?>" border="0"><br/>
  <p><a href="javascript:history.back()">Back to gallerie</a></p>
</div>
 
</body>
 
</html>
 


 
smallimgcache.php : (la ou ca merde a coup sure)
 

Citation :

<?
function BlankImage($width, $height)
{
 // cette fonction génère une image d'erreur
 if ((!$width) || ($width < 50)) $width = 50;
 if ((!$height) || ($height < 50)) $height = 50;
 $im = ImageCreate ($width,$height);
 $bcg = ImageColorAllocate ($im, 255, 255, 255);
 $tc = ImageColorAllocate ($im, 0, 0, 0);
 ImageFilledRectangle ($im, 0, 0, $width, $height, $bcg);
 ImageString($im, 1, 5, $height/2, "pas d'aperçu", $tc);
 return $im;
}
 
 
function SmallImg($imgPath, $Height, $srcSize)
{
 
    $dir_name = dirname($imgPath);
  $dest     = basename($imgPath);    
   // path info
         $destInfo = pathInfo($dir_name);
         
  // lecture de l'image d'origine
  switch ($srcSize[2]) {
  case 1: //GIF
    $srcImage = @ImageCreateFromGif($imgPath);
    break;
         case 2: //JPEG  
  $srcImage = @ImageCreateFromJPEG($imgPath);
   break;
    case 3:
  $srcImage = @ImageCreateFromPng($imgPath);
  break;
    }
 
 // si lecture impossible on affiche l'image d'erreur
 if (!$srcImage) {
  if ( $Width == 0 ) {
   $Width = $Height ;
  }
  $destImage = BlankImage($Width, $Height);
 }
 else
 // on calcul la vignette
 {
 
   // Calcule largeur image
   $srcRatio = $srcSize[0]/$srcSize[1];
 
   $destSize[1] = $Height;
   $destSize[0] = $Height*$srcRatio;
 
 
   //path rectification
   if ($destInfo['extension'] == "gif" ) {
           $imgPath = substr_replace($dest, 'jpg', -3);
   }
 
   // true color image, with anti-aliasing
   $destImage = imageCreateTrueColor($destSize[0],$destSize[1]);
   // l'anti alias ne marche pas avec GED 1.8
   //imageAntiAlias($destImage,true);
 
   // resampling
   imageCopyResampled($destImage, $srcImage, 0, 0, 0, 0,$destSize[0],$destSize[1],$srcSize[0],$srcSize[1]);
 
 }
 return $destImage;
}
 
function smallFileName($imgPath, $Height)
{
 // Cette fonction génère le non du fichier 'Cache' en fonction des paramètres
 // la vignette est générée dans le sous répertoire 'small' du répertoire de l'image en cours
 $dir_name = explode("/", dirname($imgPath));
 if (!$dir_name[2]) $dir_name[2]=$dir_name[1] ;
 $file_name = basename($imgPath);
 return $dir_name[1] . "/small/" . $dir_name[2] . "_" . $Height . "$file_name";
}
 
/*------------------------------------------------------------------------------
 Debut d'execution du script :
 recupere les parametres suivants $dest , $src et $Height
------------------------------------------------------------------------------*/
        // qualite des vignettes : moyen = 50 superieur = 100
        $qualite = 75 ;
 
 // generation du nom du fichier cache
 $smallFile = smallFileName( $imgPath, $Height );
 
 // extension image 1 gif 2 jpg 3 png
 $srcSize = getImageSize($imgPath);
 
 switch ($srcSize[2]) {
 case 1:
 case 2:
      Header ("Content-Type: image/jpeg" );
            break;
        case 3:
      Header ("Content-Type: image/png" );
            break;
 default:
      return false;
 break;
   }
     
 /* si le fichier existe, on ne le calcule pas,
 il est lu et son contenu envoye directement */
 if (file_exists($smallFile)) {
  $image = fread(fopen($smallFile, "rb" ), filesize($smallFile));  // lecture
  echo $image; // envoie
 }
 // le fichier n'existe pas, il est cree , enregistre et envoye
 else {
  $image = SmallImg ( $imgPath, $Height, $srcSize ); // création de la vignette
   
    switch ($srcSize[2]) {
    case 1:
    case 2:
         @ImageJpeg( $image,$smallFile,$qualite ); // on stocke le ficher sur le disque
       ImageJpeg( $image );        // on envoie le fichier au navigateur
             break;
 
    case 3:
     @ImagePng( $image,$smallFile);  // on stocke le ficher sur le disque
        ImagePng( $image );         // on envoie le fichier au navigateur
            break;
 
  }
 }
 
?>


 
 
voilou le binz, Pouvez vous m'aidez?, le seul fichier que je n'ai pas modifier est le dernier, cela doit etre un probleme de reference entre les fichiers, maybe.
 
Merci beaucoup

Reply

Marsh Posté le 09-08-2006 à 13:31:29   

Reply

Marsh Posté le 09-08-2006 à 13:56:46    

Salut est ce que tu as vérifié si tu fais chargé l'extension gd2 (extension=php_gd2.dll sous win) ?
Autant pour moi, tu as cette erreur Warning: file_exists() [function.file-exists]: Unable to access /small/_150Picture-2968.jpg in /mnt/109/sdb/8/6/mystik23/windsurfvietnam/epictures2/SmallImgCache.php on line 110


Message édité par hardcoregamer le 09-08-2006 à 13:58:25
Reply

Marsh Posté le 09-08-2006 à 14:22:51    

salut hardcoregamer
 
la ligne 11à correspond a :  
 
/* si le fichier existe, on ne le calcule pas,
 il est lu et son contenu envoye directement */
if (file_exists($smallFile)) {
  $image = fread(fopen($smallFile, "rb" ), filesize($smallFile));  // lecture
  echo $image; // envoie
 }
 
les fichier miniature ne sont pas cree, il devrait donc zapper le if ?
 
par contre le non de la picture est etonnant, le _150! je recherche de ce coté la
 
si vous voyez autre chose
 
merci
 
yoan

Reply

Marsh Posté le 09-08-2006 à 14:39:38    

le prob c'est le $imgPath apparement, tu l'as défini quelque part ?
hum j'avais pas vu qu'il est passé dans le lien, fo que je matte de plus pres


Message édité par hardcoregamer le 09-08-2006 à 14:48:31
Reply

Marsh Posté le 09-08-2006 à 15:12:17    

ok
j'ai modif ca
function smallFileName($imgPath, $Height)
{
 // Cette fonction génère le non du fichier 'Cache' en fonction des paramètres
 // la vignette est générée dans le sous répertoire 'small' du répertoire de l'image en cours
 $dir_name = dirname($imgPath);
 $file_name = basename($imgPath);
 return $dir_name . "/small_" . $Height . "_$file_name";
}
 
avant ca il me créait pas les miniatures car il manquait un bout du path, je te conseille de mettre les miniatures dans le meme rep que les images d'origine ca t'évitera d'avoir a creer le rep small, et dans ce cas, pour eviter de faire des minituares en boucle  
ajouter ca dans la page test
 && !eregi ("small_", $file)
comme ca
         if ($file != "." && $file != ".." && $file != "img" && $file != "sys" && $file != "small" && isImg($file) && !eregi ("small_", $file)) {


Message édité par hardcoregamer le 09-08-2006 à 15:12:47
Reply

Marsh Posté le 10-08-2006 à 06:24:31    

bonjour
 
je suis tes conseils sur la place des miniatures.
 
J'ai tester avec tes modification et il ne cree tjs pas de miniature (fichier avec small_nom dimg si j'ai bien suivi!)
 
merci du coup de main  
yoan

Reply

Marsh Posté le 14-08-2006 à 12:08:05    

Re bonjour, j'ai passer quelques jours de congé sur Saigon et je me remets sur le site, je me casse la tete sur ce script, les conseils sont les bienvenues
 
Bravo encore pour le forum et ceux qui le font vivre
 
yoan

Reply

Marsh Posté le 14-08-2006 à 15:41:58    

l'informatique a une petite part de magie, ca marche sans aucune modification de ma part ???
 
A priori, ca ne cree pas d'image miniature seulement, maintenant oui (pourqui pourquoi...)
 
merci hardcoregamer
 
yoan

Reply

Marsh Posté le 14-08-2006 à 18:01:12    

re rebonjour
 
j'avance pas mal, j'ai reussi a mettre la gallerie dans un include (j'ai bidouillé un peu les chemins des liens)
 
J'arrive a quelques chose de correct, mais au niveau de l'affichage des vignettes, j'ai l' impression qu'il recrée a chaque fois une vignette (chargement de la page assez long)?
 
Pouvez vous me donnez votre avis, j'ai trop picolé ou pas...
 
Me restera plus qu'a mettre les image taille reelle dans l'include et l'affaire est dans le sac!
 
merci, yoan

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed