IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

[GD] Problème de script qui génère des miniatures de photos


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 9
    Points : 7
    Points
    7
    Par défaut [GD] 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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);
            }
        }
    }
    ?>

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Points : 362
    Points
    362
    Par défaut
    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

  3. #3
    Membre confirmé Avatar de stunti
    Inscrit en
    Mai 2006
    Messages
    520
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Mai 2006
    Messages : 520
    Points : 594
    Points
    594
    Par défaut
    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

  4. #4
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 597
    Points : 7 832
    Points
    7 832
    Par défaut
    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 Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Merci à toutes vos réponses.

  6. #6
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 597
    Points : 7 832
    Points
    7 832
    Par défaut
    Alors, tu fais quoi ?
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Plugin Eclipse UML qui génère des aplications Web J2EE
    Par m0sch dans le forum Eclipse Modeling
    Réponses: 2
    Dernier message: 01/04/2009, 17h10
  2. script qui génère une Erreur 400
    Par faluorn dans le forum Web
    Réponses: 2
    Dernier message: 18/04/2008, 09h04
  3. action bouton qui génère des composants swing
    Par BigBarbare dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 11/03/2008, 13h10
  4. script qui crée des fichiers
    Par Emcy dans le forum Langage
    Réponses: 5
    Dernier message: 30/10/2007, 09h28
  5. comment trouver le script qui envoye des spam a partir de mon compte
    Par maya24 dans le forum Autres hébergeurs
    Réponses: 3
    Dernier message: 16/10/2007, 16h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo