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 :

[ImageMagick] Redimenssioner les images d'un dossier


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Débutant
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 268
    Points : 139
    Points
    139
    Par défaut [ImageMagick] Redimenssioner les images d'un dossier
    Bonsoir j'aimerais redimenssioner les images d'un dossier et aussi les images des sous dossiers.

    Dans un premier temps que les images du dossier

    http://isenn3.free.fr/images/tets/NY/



    http://isenn3.free.fr/images/tets/jpg.php


    J'ai trouvé pour une image
    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
     
    Header("Content-type: image/jpeg");
    $image = "logo.jpg";
    $src_im = ImageCreateFromJpeg($image);
    $size = GetImageSize($image);
    $src_w = $size[0];
    $src_h = $size[1];
    //taille de votre image
    $dst_w = 700;
    // Contraint le rééchantillonage à une largeur fixe
    // Maintient le ratio de l'image
    $dst_h = round(($dst_w / $src_w) * $src_h);
    $dst_im = ImageCreateTrueColor($dst_w,$dst_h);
    /* ImageCopyResampled copie et rééchantillonne l'image originale*/
     
     
    ImageCopyResampled($dst_im,$src_im,0,0,0,0,$dst_w,$dst_h,$src_w,$src_h);
     
     
    /* ImageJpeg génère l'image dans la sortie standard (c.à.d le navigateur).
     
    Le second paramètre est optionnel ; dans ce cas, l'image est générée dans un fichier*/
     
     
    $miniature = $image;
    ImageJpeg($dst_im,$miniature);
    J'aimerais le faire pour tout un dossier comment adapté ce script?

    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
    $dir = "NY";
     
     
      $dossier=opendir($dir);
      while($image=readdir($dossier)){
     
     
    Header("Content-type: image/jpeg");
    $src_im = ImageCreateFromJpeg($image);
    $size = GetImageSize($image);
    $src_w = $size[0];
    $src_h = $size[1];
    //taille de votre image
    $dst_w = 700;
    // Contraint le rééchantillonage à une largeur fixe
    // Maintient le ratio de l'image
    $dst_h = round(($dst_w / $src_w) * $src_h);
    $dst_im = ImageCreateTrueColor($dst_w,$dst_h);
     
     
    ImageCopyResampled($dst_im,$src_im,0,0,0,0,$dst_w,$dst_h,$src_w,$src_h);
     
     
     
     
     
    $miniature = $image;
    ImageJpeg($dst_im,$miniature);
     
    echo $image;
     
           }
    Il m'affiche bien le nom des images mais me dit quil y a des erreurs dans l image et ne fais rien en fin de compte au niveau redimenssionnement

    pourquoi?

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Points : 691
    Points
    691
    Par défaut
    pour commencer fait toi deux fonctions
    une fonction qui var parcourir tes dossiers et sous dossiers
    ca sera d=certainement une fonction recursive qui va mettre dans un tableau
    les chemein de chaque imge
    et ensuite un deuxieme fonction qui va redimensionner une image
    et grace a un call_back tu va tratiter tout ton tableau (renvoyer par la premiere fonction) grace a la duexieme fonction et voila

  3. #3
    Débutant
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 268
    Points : 139
    Points
    139
    Par défaut
    J'ai fait une fonction qui parcoure un dossier donné


    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
     
     
     function direc($dir)
      { 
      $dossier=opendir($dir);
      $nb = 0;
      while($image=readdir($dossier)){
     
       if($image <> '.' && $image <> '..')
       {
       $nb++;
       $o[$nb] = $dir."/".$image;
     
       }
       }
    return $o;
     }

    Et une deuxième qui redimensionne et ca marche .

    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
    <?
     
    Header("Content-type: image/jpeg");
     
     
    for($i = 1;$i <=$nb ; $i++)
     
    {
     
    $image = $o["$i"];
    $src_im = ImageCreateFromJpeg($image);
    $size = GetImageSize($image);
    $src_w = $size[0];
    $src_h = $size[1];
     
     
    //taille de votre image
    $dst_w = 700;
    // Contraint le rééchantillonage à une largeur fixe
    // Maintient le ratio de l'image
    $dst_h = round(($dst_w / $src_w) * $src_h);
    $dst_im = ImageCreateTrueColor($dst_w,$dst_h);
     
    ImageCopyResampled($dst_im,$src_im,0,0,0,0,$dst_w,$dst_h,$src_w,$src_h);
     
    $miniature = $image;
    ImageJpeg($dst_im,$miniature);
     
    }
    ?>

    J'appelle le tout par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $o =  direc("NY");
    redimension($o);
    J'aimerais pouvoir maintenant liser tout le dossier et les sous dossiers .
    Il faut modifier la fonction direc qui garde l adresse relative de chaque image que l'on veut redimensionner , merci

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Points : 691
    Points
    691
    Par défaut
    pour lister tes dossier et sous dossier il faut que tu passe par une fonction recursive
    du genre(mais sans garantie)
    <?php

    &#160;
    function&#160;direc($dir)
    &#160;&#160;{
    &#160;&#160;if(
    $dossier=opendir($dir));
    &#160;&#160;
    $nb&#160;=&#160;0;
    &#160;&#160;while(
    $image=readdir($dossier)){

    &#160;&#160;&#160;if(
    $image&#160;<>&#160;'.'&#160;&&&#160;$image&#160;<>&#160;'..')
    &#160;&#160;&#160;{
    &#160;&#160;&#160;
    $nb++;
    &#160;&#160;&#160;
    $o[$nb]&#160;=&#160;$dir."/".$image;
    direct($o[$nb];
    &#160;&#160;&#160;}
    &#160;&#160;&#160;}else{
    return&#160;
    $o;
    &#160;}&#160;}
    ?>

  5. #5
    Débutant
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 268
    Points : 139
    Points
    139
    Par défaut
    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
     
     function direc($dir)
      {
     
      $dossier=opendir($dir);
      $nb = 0;
     
     
      while($image=readdir($dossier)){
     
         $l=array('.', '..');
         if(!in_array($image,$l)){
         if(is_dir($dir."/".$image)){
         $o[$nb] = direc($dir."/".$image);
         }
     
         else{
     
     
       $nb++;
       $o[$nb] = $dir."/".$image;
       }
       }
     
     
       }
    return $o;
      }

    mais ca marche toujours pas
    what's wrong?

  6. #6
    Débutant
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 268
    Points : 139
    Points
    139
    Par défaut
    j'ai corrigé quelques trucs qui n'allaient pas dans la récursivité comme le
    $nb = 0; .
    J'ai aussi ajouté un paramètre $k à ma fonction

    Je souhaite
    $o[1] = adrese1
    $o[2] = adresse2...



    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
     
     function direc($dir,$k)
      {
     
      $dossier=opendir($dir);
      while($image=readdir($dossier)){
     
         $l=array('.', '..');
         if(!in_array($image,$l)){
         if(is_dir($dir."/".$image)){
         $o[] =  direc($dir."/".$image,$k);
     
      }
     
         else{
     
       $k++;
       $o[$k] = $dir."/".$image;
     
     
    	 }
       }
     
       }
       return $o;
      }

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 882
    Points : 691
    Points
    691
    Par défaut
    non la meilleur solution est de retourner un tableau
    ensuite tu le traite avec une fonction comme array_walk
    http://fr2.php.net/manual/fr/function.array-walk.php

  8. #8
    Débutant
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 268
    Points : 139
    Points
    139
    Par défaut
    Finalement j'ai fait comme ceci , ne comprenant pas trop array_walk()

    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
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    <?
     
     
    Header("Content-type: image/jpeg");
     
    function liste_recursive($dossier_a_parcourir,$liste,$nivo)
    {
        $dir  =  opendir($dossier_a_parcourir) ;
        $nivo++;
        while( $file  =  readdir($dir) )
            {
                if((is_dir($dossier_a_parcourir.'/'.$file)) && $file !=  '.' && $file !=  '..' && $file != 'thumbnail' )
                {
                    $path = $dossier_a_parcourir.'/'.$file;
    //                $liste['listechemin'][] = $path;
    //                $liste['listedossier'][] = $file;
    //                $liste['listenivo'][] = $nivo;
                    $liste=liste_recursive($path,$liste,$nivo);
                }else{
     
    				if($file !=  '.' && $file !=  '..' && $file != 'Thumbs.db' && $file != 'thumbnail')
    			{
                    $path = $dossier_a_parcourir.'/'.$file;
                    $liste['listechemin'][] = $path;
                    $liste['listedossier'][] = $file;
                    $liste['listenivo'][] = $nivo;
    	 		}
    		}
            }
        return $liste;
     
     
    }
     
     
     
     
     
     
     
     
     
     
    function redimension($o){
    for($i = 0;$i <=count($o) ; $i++)
     
    {
     
     
    $image = $o["$i"];
    echo $image;
    $src_im = ImageCreateFromJpeg($image);
    $size = GetImageSize($image);
    $src_w = $size[0];
    $src_h = $size[1];
     
     
    //taille de votre image
    $dst_w = 700;
    // Contraint le rééchantillonage à une largeur fixe
    // Maintient le ratio de l'image
    $dst_h = round(($dst_w / $src_w) * $src_h);
    $dst_im = ImageCreateTrueColor($dst_w,$dst_h);
     
    ImageCopyResampled($dst_im,$src_im,0,0,0,0,$dst_w,$dst_h,$src_w,$src_h);
     
    $miniature = $image;
    ImageJpeg($dst_im,$miniature);
     
    }
    }
     
     
     
    $racine  =  $_GET['r'];
    $liste = array("listechemin" => array(), "listedossier" => array(), "listenivo" => array());
    $liste = liste_recursive($racine,$liste,0);
    /* Ne pas tenir compte de cette partie, elle n'est utile qu'au developement */
    echo '<br />';
    $nbelem = (count($liste['listedossier']));
    echo 'nombre de valeurs dans cet array  =  '.$nbelem.'<br /><br />';
    for($i = 0;$i<$nbelem;$i++)
    {
        echo '$listenivo['.$i.']  =  '.$liste['listenivo'][$i].'<br />';
        echo '$listechemin['.$i.']  =  '.$liste['listechemin'][$i].'<br />';
        echo '$listedossier['.$i.']  =  '.$liste['listedossier'][$i].'<hr />';
    }
     
     
    redimension($liste['listechemin']);
    j'appele la page jpg.php je la place la ou il y a le dossier correspondant et jappelle
    jpg.php?r=nom_dossier

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

Discussions similaires

  1. afficher les image d'un dossier
    Par amintek dans le forum C++Builder
    Réponses: 4
    Dernier message: 14/05/2007, 15h58
  2. Réponses: 5
    Dernier message: 30/04/2007, 11h53
  3. [ImageMagick] Redimenssioner une image
    Par rane dans le forum Bibliothèques et frameworks
    Réponses: 12
    Dernier message: 20/09/2006, 13h47
  4. imprimer toutes les images d'un dossier
    Par chat84 dans le forum Access
    Réponses: 1
    Dernier message: 19/05/2006, 14h45
  5. Pb avec code source "lister les images d'un dossier"
    Par Mimisator dans le forum Langage
    Réponses: 2
    Dernier message: 19/10/2005, 15h25

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