Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > Images > GD
GD Forum d'entraide pour l'extension GD permettant de manipuler des images en PHP. Avant de poster -> tutoriels GD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/06/2006, 10h07   #1
Invité de passage
 
Inscription : juillet 2002
Messages : 9
Détails du profil
Informations forums :
Inscription : juillet 2002
Messages : 9
Points : 2
Points : 2
Par défaut Problème de script qui génère des miniatures de photos

Bonjour,

J'ai un petit souci avec le script qui n'affiche pas des miniatures de photos.
Pourriez-vous m'élairer sur ce prob ?

Merci d'avance

Je dispose un fichier index1.php et mini.php et un dossier titi qui contient les photos.

index1.php
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<head>
<title>Ma galerie</title>
</head>
 
<body>
<?php
// cette portion à déjà été détaillé
$tableau = array();
$dossier = opendir ('./titi/');
while ($fichier = readdir ($dossier)) {
    if ($fichier != '.' && $fichier != '..' && $fichier != 'index1.php') {
        $tableau[] = $fichier;
    }
}
closedir ($dossier);
 
$nbcol=4;
$nbpics = count($tableau);
 
if ($nbpics != 0) {
    echo '<table>';  
    for ($i=0; $i<$nbpics; $i++){
        if($i%$nbcol==0) echo '<tr>';  
        // noter bien que l'on place un lien vers le fichier mini.php qui va générer nos miniatures. On ajoute un argument, le nom de fichier image à miniaturiser
        echo '<td><a href="titi/' , $tableau[$i] , '"><img src="mini.php?f=' , $tableau[$i] , '" alt="Image" /></a></td>';
        if($i%$nbcol==($nbcol-1) or $i==($nbpics-1)) echo '</tr>';
    }  
    echo '</table>';
}
else echo 'Aucune image à afficher';
?>
 
 
</body>
</html>
mini.php

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<?php
// on défini notre ratio pour nos miniatures (CF. plus haut pour des explications
$ratio = 150;
// on défini le répertoire qui contient nos images de grande taille
$dir = './titi/';
 
// si aucune image n'est donnée en arguments, on redirige le visiteur vers l'accueil de la galerie
if (!isset($_GET['f'])) {
    header('location: index1.php');
    exit();
}
else {
    // on récupère le nom de fichier à miniaturiser
    $image = $_GET['f'];
    // on récupère les infos de cette image
    $tableau = @getimagesize('./titi/'.$image);
    // si il ne s'agit pas d'un fichier image, on redirige le visiteur vers l'accueil de la galerie
    if ($tableau == FALSE) {
        header('location: index1.php');
        exit();
    }
    else {
        // si notre image est de type jpeg
        if ($tableau[2] == 2) {
            // on crée une image à partir de notre grande image à l'aide de la librairie GD
            $src = imagecreatefromjpeg($dir.'/'.$image);
            // on teste si notre image est de type paysage ou portrait
            if ($tableau[0] > $tableau[1]) {
                $im = imagecreatetruecolor(round(($ratio/$tableau[1])*$tableau[0]), $ratio);
                imagecopyresampled($im, $src, 0, 0, 0, 0, round(($ratio/$tableau[1])*$tableau[0]), $ratio, $tableau[0], $tableau[1]);
            }
            else {
                $im = imagecreatetruecolor($ratio, round(($ratio/$tableau[0])*$tableau[1]));
                imagecopyresampled($im, $src, 0, 0, 0, 0, $ratio, round($tableau[1]*($ratio/$tableau[0])), $tableau[0], $tableau[1]);
            }
            // contrairement au premier cas où l'on créait un fichier sur le disque dur, ici, comme on génère des images à la volée, on envoie un header au navigateur web du visiteur lui disant que le fichier mini.php va en fait générer une image de type jpeg, soit du type mime image/jpeg.
            header ("Content-type: image/jpeg");
            imagejpeg ($im);
        }
        elseif ($tableau[2] == 3) {
            $src = imagecreatefrompng($dir.'/'.$image);
            if ($tableau[0] > $tableau[1]) {
                $im = imagecreatetruecolor(round(($ratio/$tableau[1])*$tableau[0]), $ratio);
                imagecopyresampled($im, $src, 0, 0, 0, 0, round(($ratio/$tableau[1])*$tableau[0]), $ratio, $tableau[0], $tableau[1]);
            }
            else {
                $im = imagecreatetruecolor($ratio, round(($ratio/$tableau[0])*$tableau[1]));
                imagecopyresampled($im, $src, 0, 0, 0, 0, $ratio, round($tableau[1]*($ratio/$tableau[0])), $tableau[0], $tableau[1]);
            }
            header ("Content-type: image/png");
            imagepng ($im);
        }
    }
}
?>
Panama est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2006, 21h12   #2
Membre éclairé
 
Inscription : décembre 2004
Messages : 658
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : décembre 2004
Messages : 658
Points : 317
Points : 317
Pas de reponse peut etre pour toi mais une question

Pourquoi tout le monde veut absolument se galerer à faire des miniatures alors que ca redimensionne en temps reel les images le web quand c'est bien fait.

Je m'explique.

Tu prends deux varaible la hauteur max et la largeur max de ton image
Tu fais un ratio de chacun avec ton image en cours.
Tu recuperes le ratio que diminue le plus ton image (qui prendra la valeur max en largeur ou hauteur) et tu l'applique a l'autre coté.

tu appliques les deux valeurs trouvé au champs width et height de la ou apparait l'image et voila le tour est joué.

Maintenant il est vrai que si tu veux que l'image s'affiche dans un carré fixe sans deformation la faut utiliser GD
zulot est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2006, 21h43   #3
Membre chevronné
 
Avatar de stunti
 
Inscription : mai 2006
Messages : 521
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : mai 2006
Messages : 521
Points : 602
Points : 602
Citation:
Envoyé par zulot
Pourquoi tout le monde veut absolument se galerer à faire des miniatures alors que ca redimensionne en temps reel les images le web quand c'est bien fait.
Le probleme avec ta methode, c'est que si je photographie 10 images en 1600x1200. en gros 2Mo par image.
Le navigateur va telecharger l'image entiere avant de la redimensionner.
Donc uniquement les images vont prendre 20 Mo pour finalement afficher une image en 160x120.

D'ou l'interet de script qui redimensionne lse images
__________________
If it's not broken, don't fix it.
BiliBa Built on top of Zend Framework
stunti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2006, 11h32   #4
Rédacteur/Modérateur
 
Avatar de troumad
 
Homme Bernard SIAUD
Enseignant
Inscription : novembre 2003
Messages : 4 400
Détails du profil
Informations personnelles :
Nom : Homme Bernard SIAUD
Âge : 44
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : novembre 2003
Messages : 4 400
Points : 4 944
Points : 4 944
J'ai fait une manip du genre qui t'intéresse pour la même réaison que toi dans mon essemble de fichiers : http://troumad.info/Linux/photo.zip
__________________
Modérateur Mandriva Linux
Amicalement VOOotre
Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
Mes tutoriels
troumad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/01/2007, 14h26   #5
Invité de passage
 
Inscription : juillet 2002
Messages : 9
Détails du profil
Informations forums :
Inscription : juillet 2002
Messages : 9
Points : 2
Points : 2
Merci à toutes vos réponses.
Panama est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2007, 17h32   #6
Rédacteur/Modérateur
 
Avatar de troumad
 
Homme Bernard SIAUD
Enseignant
Inscription : novembre 2003
Messages : 4 400
Détails du profil
Informations personnelles :
Nom : Homme Bernard SIAUD
Âge : 44
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Enseignant
Secteur : Enseignement

Informations forums :
Inscription : novembre 2003
Messages : 4 400
Points : 4 944
Points : 4 944
Alors, tu fais quoi ?
__________________
Modérateur Mandriva Linux
Amicalement VOOotre
Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
Mes tutoriels
troumad est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h04.


 
 
 
 
Partenaires

Hébergement Web