Partage
  • Partager sur Facebook
  • Partager sur Twitter

Projet création d'un sprite

erreur boucle infinie

Sujet résolu
    19 mai 2019 à 0:37:38

    Bonjour, j'ai un petit soucis et j'aurais besoin de votre aide. Je dois creer un programme. Au départ, nous avons un dossier contenant plusieurs images au format PNG.L’idée principale du projet est de développer un programme, qui concatène toutes ces images en un seul sprite. Voici mon code:

    <?php
    
    function list_dir($argv) 
    {
                $argv;
                $tableau2 = array();
    
            foreach($argv as $value)
            {
                if(is_dir($value))
                {
                    
                    if ($dir = opendir($value)) 
                    {
                                        
                        while($file = readdir($dir))
                        {
                        
                            $ignoreList = ['.', '..'];
                            //echo $file . PHP_EOL;
                            if($file != in_array($file, $ignoreList) 
                            && fnmatch("*.png", $file) 
                            || fnmatch("*.jpeg", $file) 
                            || fnmatch("*.jpg", $file) 
                            || fnmatch("*.tiff", $file) 
                            || fnmatch("*gif", $file)) 
                            {
                                $tableau2[] = $file;
                            
                            }
                            
                        }
                    
                                closedir($dir);
                    }
                }
            }
    
    
                $largeur_total = 0;
                $hauteurmax    = 0;
            print_r($tableau2);
        
            
            foreach ($tableau2 as $value) 
            {
                if(fnmatch("*.jpeg", $file) || fnmatch("*.jpg", $file))
                {
                
                    $source = imagecreatefromjpeg($value); // Source tableau
                    $dimensionsx = imagesx($source);
                    $dimensionsy = imagesy($source);
                    $largeur_total += ($dimensionsx);
                    
                    if ($dimensionsy > $hauteurmax) {
                        $hauteurmax = $dimensionsy;
                    }
                    
                    echo $largeur_total;
                
                
                
                    $pos     = 0;
                    $padding = 0;
                    
                    $image = imagecreatetruecolor($largeur_total, $hauteurmax); // 
                    
                    imagesavealpha($image, true);
                    $blanc = imagecolorallocate($image, 255, 255, 255);
                    
                    $transparent = imagecolorallocatealpha($image, 0, 0, 0, 127); // definit l'arriere plan transparent
                    
                    imagefill($image, 0, 0, $transparent);
                
    
                    // On met les photos dans l'image de destination (l'image de base)
                    imagecopymerge($image, $source, $pos, 0, 0, 0, $dimensionsx, $dimensionsy, 100);
                    $pos += ($padding + $hauteur);
    
                    imagepng($image, "essai.png"); //enregistre l'image modifiée
                    echo $pos . PHP_EOL;
    
                }
            }
    
            var_dump(list_dir($argv));
    
        }
    
        list_dir($argv);


    Mon soucis est lors de l'execution de mon script je me retrouve avec une boucle infinie et je ne sais pas pourquoi... Pouvez vous m'aider?

    • Partager sur Facebook
    • Partager sur Twitter
      19 mai 2019 à 0:51:49

      Bonjour.

      Pour commencer, supprimes le code qui se trouve à la ligne 5.

      Ensuite, tu devrais éviter de donner le même nom de variable dans la même fonction, voir lignes 8 et 45 (foreach), ou alors fait un unset de la variable précédente après ta première boucle.

      Sinon fais attention aux variables que tu utilises, ligne 47, ce n'est pas la variable $file que tu dois tester.

      • Partager sur Facebook
      • Partager sur Twitter

      Face a quelqu'un pour qui l'on n'éprouve que de l'aversion et du mépris, les yeux d'un homme deviennent extrêmement froids et cruels.

        19 mai 2019 à 13:38:04

        Lartak a écrit:

        Bonjour.

        Pour commencer, supprimes le code qui se trouve à la ligne 5.

        Ensuite, tu devrais éviter de donner le même nom de variable dans la même fonction, voir lignes 8 et 45 (foreach), ou alors fait un unset de la variable précédente après ta première boucle.

        Sinon fais attention aux variables que tu utilises, ligne 47, ce n'est pas la variable $file que tu dois tester.

        Merci pour tous ces conseils! J’a rectifié tout cela mais j’ai toujours ce problème de boucle infinie que je ne comprends pas... Help je dois rendre mon projet ce soir...

        • Partager sur Facebook
        • Partager sur Twitter
          20 mai 2019 à 11:16:37

          Hello,

          Sans vouloir te démoraliser il y a une classe qui fait très bien le travail pour ce qui est d'itérer sur les fichiers/dossier, c'est la classe DirectoryIterator. Je te conseille fortement de jeter un oeil.

          Pour ce qui est de la boucle, tu ne vérifies jamais si readdir retourne bien false, lis la doc, ce que tu veux, c'est itérer tant que readdir retourne true.

          -
          Edité par xoxotf 20 mai 2019 à 11:22:43

          • Partager sur Facebook
          • Partager sur Twitter
            20 mai 2019 à 16:58:04

            Merci pour ta réponse. Oui cela me faciliterais la vie mais je ne suis pas autoriser a l'utiliser.

            • Partager sur Facebook
            • Partager sur Twitter

            Projet création d'un sprite

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown