Script de gallerie photo - PHP - Programmation
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
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
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
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)) {
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
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
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
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
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 )
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
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 :
<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 :
<?
# 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)
<?
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