Partage
  • Partager sur Facebook
  • Partager sur Twitter

Passer un paramètre ‘$image’ à une fonction PHP GD

$image dans GD

Sujet résolu
    5 mars 2021 à 15:03:37

    Bonjour les codeurs

    Je réalise une application domotique via des ESP32 et une base mySql chez mon prestataire Online, en PHP avec la bibliothèque GD.

    Voici ici le début du brouillon :https://www.voilec.com/pages/domus.php

    Mon problème est que je ne sais pas passer le paramètre « $image » à des fonctions de traitement !

    Ma fonction de base qui crée l’image très classiquement :

    <$php
    header("Content-type: image/png");
    ….

    Suite très banale qui ne pose pas de problème, sauf quand j’appelle une fonction quelconque travaillant sur l’image :

    drawA ($image, 10.10,….) ; // ??????????????

    ///

    Cette fonction est définie dans un autre .php avec un require au début du programme principal

    function drawA ($img, xpos, ypos,…)
    {
    Imagestring ($img, 5, xpos, ypos, ‘A’, $colorBlack);
    }

    Comment faire passer en PHP ce paramètre image aux fonctions ?

    J’avais essayé de le déclarer en global en début de mon programme principal, mais ce doit être stupide.

    Merci pour vos lumières

    • Partager sur Facebook
    • Partager sur Twitter
      5 mars 2021 à 15:23:56

      Bonjour,

      Ayant développé une solution domotique de A à Z, le sujet m'intéresse mais j'avoue n'avoir pas compris ton problème.

      Transmettre un paramètre à une fonction en php c'est toujours la même manière.

      C'est quoi ton paramètre $image ? une vraie image et de quoi ?

      Par ailleurs, pourquoi mets tu ta base de données chez un prestataire ? car il va te falloir blinder pour le pas prendre de risque de sécurité ... tant que ce sont des capteurs cela va encore mais si tu as des actionneurs risque !

      A+

      • Partager sur Facebook
      • Partager sur Twitter
        5 mars 2021 à 16:00:48

        Merci pour cette réponse, je vais tenter d’éclaircir

        Il s’agit bien d’une image créée en GD par dans le php principal

        $image = imagecreate(x,y) ;

        … qui se termine par

        imagepng($image," panel.png");
        imageDestroy($image); // Release memory

        Entre les deux j’appelle de nombreuses fonctions externes de traitements, dans d’autres fichiers, qui ont besoin de connaître ‘$image’, mais je ne sais pas le passer, par exemple :

        drawA ($image, 10.10,….) ; // ??????????????

        devrait appeler

        function drawA ($img, xpos, ypos,…)
        {
        Imagestring ($img, 5, xpos, ypos, ‘A’, $colorBlack);
        }

        Mais cela ne passe pas !

        $image en cours de création n’est pas une variable classique, c’est bien le problème qui me bloque.

        /////

        Quand à la sécurité, je ne pense pas que mettre ma base soit Online soit risqué, le site ne devrait pas pouvoir à êtrefacilement piraté.
        Pour les actionneurs effectivement, je devrais travailler la sécurité pour éviter les commandes non désirées
        • Partager sur Facebook
        • Partager sur Twitter
          5 mars 2021 à 16:07:44

          Tu as un message d'erreur ? as tu regardé la log apache ?

          Peut-être que tu débordes si trop de kilo-octets ?

          Sinon pourquoi ne pas sauver ton image créée dans un répertoire et ensuite passer le chemin de l'image à tes fonctions pour traitement ?

          Ta base online est sans doute bien sécurisée mais tu transites bien via internet des infos entre tes capteurs / actionneurs à base d'ESP et ta base  - d'ailleurs tu utilises quel protocole ?

          A+

          • Partager sur Facebook
          • Partager sur Twitter
            5 mars 2021 à 17:33:30

            Je n’ai aucun message d’erreur, simplement les fonctions ne sont pas exécutées.

            Je ne peux pas sauver l’image en cours car les traitements par fonctions se font tout le long, elle n’est sauvée que terminée.

            J’ai commencé à expliquer dans ma page, après l’image, que mes capteurs passent en local via ESP Now vers un ESP32 central qui passe par Internet pour alimenter la base.

            Les clients demandent un traitement dans une page PHP.

            • Partager sur Facebook
            • Partager sur Twitter
              5 mars 2021 à 17:44:04

              Tu as bien fait des includes pour que tes fonctions soient reconnues quand tu les appelles ?

              Si je comprends bien, tu modifies ton image au fur et à mesure des nouvelles données ?

              A+

              • Partager sur Facebook
              • Partager sur Twitter
                5 mars 2021 à 18:03:59

                Je fais bien un require des fichiers qui comprennent les fonctions appelées, mais j’ai même essayé de les inclure dans le corps principal, le $image na passe pas.

                Je ne modifie l’image que quand un client la demande, par exemple en rafraîchissant sa page Web, la vase est alimentée automatiquement toutes les 2 minutes.

                • Partager sur Facebook
                • Partager sur Twitter
                  5 mars 2021 à 18:44:55

                  Quelle taille fait ton image quand tu essais de la transmettre ?

                  Tu as bien vérifié avant de transmettre que l'image était correctement constituée ?

                  Tu es sûr que le problème vient bien de la transmission ? 

                  A+

                  • Partager sur Facebook
                  • Partager sur Twitter
                    5 mars 2021 à 18:48:06

                    Tout marche parfaitement, sauf que les fonctions dans lesquelles je passe le paramètre ‘$image’ ne sont pas vues.

                    • Partager sur Facebook
                    • Partager sur Twitter
                      6 mars 2021 à 6:53:36

                      Je ne comprends pas que tu n'ai pas d'erreur car si les fonctions ne sont pas vues l'interpréteur php devrait te sortir une belle erreur.

                      Tu pourrais montrer un bout de code ou justement tu appelles une fonction et le code de la fonction appelée. Utilise le bouton </>.

                      A+

                      • Partager sur Facebook
                      • Partager sur Twitter
                        6 mars 2021 à 11:49:32

                        Voici tout le code de l'exemple qui est exécuté dans cette page au début (rectangle noir ) : https://www.voilec.com/pages/domus.php

                        <?php
                        header("Content-type: image/png"); 
                        $x = 200; 
                        $y = 100; 
                        $font = 'MaiandraBold.ttf';
                        
                        
                        $image = imagecreatetruecolor($x,$y);
                        $colorBackground = imageColorAllocate($image, 200,255,200); // Background
                        $colorYellow = imageColorAllocate($image, 255,255,0);
                        
                        
                        imagestring($image, 5, 10, 30, "Fonctionne", $colorYellow); // Texte OK
                        //imagestring($image, 5, 10, 50, "Ne fonctionne pas !!!", $colorYellow); // ?????
                        testPassage ($image); // ???????????
                        
                        imagepng($image, "../domus/bug.png"); // Sauve dans la directory courante l'image finale
                        imagedestroy($image);
                        
                        // *****************
                        
                        function testPassage ($img)
                        {
                        imagestring($img, 5, 10, 50, "Ne fonctionne pas !!!", $colorYellow); // ?????
                        }
                        ?>
                        

                        :
                        • Partager sur Facebook
                        • Partager sur Twitter
                          7 mars 2021 à 6:10:18

                          Que donne un echo style "entrée dans testPassage" au début de la fonction ?

                          Tu peux enlever le header pour tester ?

                          A+

                          • Partager sur Facebook
                          • Partager sur Twitter
                            7 mars 2021 à 8:58:50

                            C‘est très étrange si j'enlève le header et que je rajoute un écho, même résultat !

                            <?php
                            //header("Content-type: image/png"); 
                            echo testPassage (0);
                            

                            J’efface avant l’ancienne image « bug.png » mais elle se recrée à l’identique, alors que sans header elle ne devrait pas pouvoir se créer

                            Echo n’affiche rien.

                            Je précise : Je me doutais du résultat, mais passer $image en global plante tout...

                            $global $image; // <<<<<<<<< Plantage

                            ************************************************

                            Je viens de comprendre mes gros bugs, c'est bon maintenant...

                            1) J'appelle par une fonction qui appelle une autre fonction

                            2) La fonction fille retourne le paramètre $image...

                            Merci pour votre aide

                            Je mets les résultats en ligne ici : https://www.voilec.com/pages/domus.php

                            -
                            Edité par chrccouderc 7 mars 2021 à 21:59:03

                            • Partager sur Facebook
                            • Partager sur Twitter
                              8 mars 2021 à 7:05:49

                              Je n'ai pas compris trop ta réponse mais si cela fonctionne c'est le principal. Passe en résolu.

                              Pour info j'ai traité totalement différemment le même besoin de mise à jour du tableau de bord et d'actionner les modules.

                              1) manière directe

                              J'ai développé une page web avec des widgets en javascript à base de canvas. https://developer.mozilla.org/fr/docs/Web/HTML/Element/canvas

                              Le serveur qui récupère les données des modules les pousse via le mécanisme de SSE vers chaque client navigateur. https://developer.mozilla.org/fr/docs/Web/API/Server-sent_events/Using_server-sent_events

                              Dans la page web, des fonctions javascript récupèrent les données reçues et mettent à jour les widgets.

                              Pour les actionneurs, le maniement des widgets entraînent une requête ajax qui sera traitée par le serveur pour action vers les modules.

                              Il n'y a donc ni rafraîchissement de page ni création d'image au sens png / jpeg et le tout est asynchrone. Les données se mettent à jour en temps réel (au sens web) par rapport à l'évolution des capteurs.

                              2) utilisation de mqtt : il faut dans ce cas avoir un broker et que chaque module implémente un client mqtt.

                              A+

                              • Partager sur Facebook
                              • Partager sur Twitter
                                8 mars 2021 à 13:57:04

                                Je ne connaissais pas canvas, mais ta solution est intéressante, j'essayerai pour une aitre application.

                                • Partager sur Facebook
                                • Partager sur Twitter

                                Passer un paramètre ‘$image’ à une fonction PHP GD

                                × 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