Partage
  • Partager sur Facebook
  • Partager sur Twitter

imagettftext

L'image du texte ne se crée pas

    16 juin 2019 à 19:15:49

    Bonjour à tous !

    Voici un petit problème sur lequel je me casse les dents depuis 48h !

    Je suis sur le cours suivant de Mathieu NEBRA :

    Concevez votre site web avec PHP et MySQL

    TP : créez un espace membres

    J'essaye de créer un Captcha sur mon espace membre. J'ai trouvé un super tuto.

    J'ai créé le fichier captcha.php suivant, permettant de former l'image captcha au format PNG :

    <?php
    	// Create the captcha's image
    	session_start();
    
    	$sizex = 100;
    	$sizey = 40;
    	$img = @imagecreatetruecolor($sizex, $sizey) or die('Impossible de créer un flux d\'image GD');
    
    	$fill_color = imagecolorallocate($img, 100, 150, 200);
    	imagefilledrectangle($img, 0, 0, $sizex, $sizey, $fill_color);
    
    	$size = 18;
    	$inclinaison = 0;
    	$firstcharx = 10;
    	$firstchary = 10;
    	$text_color = imagecolorallocate($img, 255, 255, 0);
    	$fontfile = '1942-webfont.ttf';
    	$_SESSION['captcha'] = rand(1000,9999);
    
    	imagettftext($img, $size, $inclinaison, $firstcharx, $firstchary, $text_color, $fontfile, $_SESSION['captcha']);
    		#$fontsize1_5 = 5;
    		#imagestring($img, $fontsize1_5, $firstcharx, $firstchary, $_SESSION['captcha'], $text_color);
    	
    	header("Content-type:image/png");
    	imagepng($img);
    	imagedestroy($img);
    ?>

    Voici l'arborescence des fichiers concernés :

    Quand j'utilise imagestring() (les deux lignes en commentaire #), j'obtiens une image, pas de soucis. Si ce n'est que je voudrais une police plus élaborée que celle proposée par défaut par imagestring() ! Pour un captcha, c'est le minimum...

    Or si j'utilise la fonction imagettftext() suggérée dans plusieurs tutos, aucune image ne s'affiche (même pas le fond de couleur $fill_color) : seul l'alias (alt de l'image lors de l'appel par un fichier html) "Image captcha" apparaît.

    J'ai essayé 2 polices différentes, au cas où le fichier serait corrompu. Rien n'y fait !

    Je suis sous WAMP64, j'utilise le PHP v7.2.4. L'extension GD2 semble bien fonctionner.

    Qui a une idée ?!

    -
    Edité par C'Me 16 juin 2019 à 22:16:30

    • Partager sur Facebook
    • Partager sur Twitter

    "La chance sourit aux esprits préparés" - Louis Pasteur

      16 juin 2019 à 21:09:18 - Message modéré pour le motif suivant : La demande de l'équipe de modération a été honorée


      Pas d'aide concernant le code par MP, le forum est là pour ça :)

        16 juin 2019 à 22:17:21

        Merci pour votre aide : je viens de remplacer l'image du code par un code balisé et coloré.

        Bien cordialement !

        • Partager sur Facebook
        • Partager sur Twitter

        "La chance sourit aux esprits préparés" - Louis Pasteur

          17 juin 2019 à 7:48:43

          Merci de la correction :)

          Pour ton problème : que disent les logs ? Si tu affiches les erreurs PHP, en vois-tu ?

          • Partager sur Facebook
          • Partager sur Twitter

          Pas d'aide concernant le code par MP, le forum est là pour ça :)

            17 juin 2019 à 19:08:42

            Pas de quoi ! ;)

            Pour les logs, j'ai vu un tuto en passant, mais je n'ai pas eu le temps de m'y coller, et pour tout dire : je suis plutôt novice sur leur usage. :-° Si tu as quelques commandes logs principales à me suggérer... :D Sinon, je ferai 2 ou 3 recherches (pas  le temps pour l'instant) !

            En tout cas, aucune erreur d'encodage PHP ou HTML ne semble émerger. Je me demande si les paramètres (coordonnées et dimensions des caractères par rapport à l'image rectangulaire créée) ne sont pas en cause, ou moins probablement les deux polices choisies.

            -
            Edité par C'Me 17 juin 2019 à 19:09:43

            • Partager sur Facebook
            • Partager sur Twitter

            "La chance sourit aux esprits préparés" - Louis Pasteur

              18 juin 2019 à 11:40:11

              Salut

              Je ne suis pas sûre, mais je crois que Lamecarlate parlait des logs sur ton serveur ^^.

              Si tu es en local (wamp xampp etc) tu dois avoir des fichiers de log qui indiquent s'il y a eu des erreurs ou pas.

              Bizarre que cela ne te retourne aucune erreur :o 

              • Partager sur Facebook
              • Partager sur Twitter
                18 juin 2019 à 19:48:07

                Salut !

                A ma dernière tentative d'utilisation de la fonction imagettftext() pour afficher mon captcha, php_error.log a affiché :

                [18-Jun-2019 17:27:52 UTC] PHP Warning:  imagettftext(): Could not find/open font in C:\wamp64\www\tests\space_members\captcha.php on line 20
                [18-Jun-2019 17:27:52 UTC] PHP Stack trace:
                [18-Jun-2019 17:27:52 UTC] PHP   1. {main}() C:\wamp64\www\tests\space_members\captcha.php:0
                [18-Jun-2019 17:27:52 UTC] PHP   2. imagettftext() C:\wamp64\www\tests\space_members\captcha.php:20



                -
                Edité par C'Me 18 juin 2019 à 19:55:18

                • Partager sur Facebook
                • Partager sur Twitter

                "La chance sourit aux esprits préparés" - Louis Pasteur

                  18 juin 2019 à 20:30:32

                  Bonsoir.

                  Il est tout simplement indiqué, que la font que tu veux utiliser, ne peut pas être chargée, en même temps tu lui demandes d'aller charger une font qui serait au même niveau que ton fichier captcha.php, sauf qu'elle doit probablement se situer dans ton dossier fonts.

                  • 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.

                    18 juin 2019 à 23:26:22

                    Bonsoir Lartak,

                    Merci pour ta contribution. :)

                    Petite précision : comme tu peux le constater dans l'arborescence que j'ai affichée dans le premier post de ce sujet, j'ai pris le soin de coller le fichier font TTF exceptionnellement au même niveau que le captcha.php (pour évacuer tout éventuel soucis d'adressage et me simplifier la vie :euh:). Je pense plus à la rigueur à une police très graphique mais pas très compatible avec les fonctions utilisées, ou bien un problème de paramétrage de la police (taille, position, centrage...). Mais j'ai beau relire les définitions, exemples, infos sur php.net, essayer différents paramètres... Rien n'y fait !

                    Mon extension gd2 est bien activée et a fait son office sur d'autres essais de pages utilisant des graphiques aux formats PHP, JPEG, PNG.

                    What else ?! o_O

                    • Partager sur Facebook
                    • Partager sur Twitter

                    "La chance sourit aux esprits préparés" - Louis Pasteur

                      19 juin 2019 à 1:40:07

                      D'après la documentation :

                      Dans de nombreux cas où une police réside dans le même répertoire que le script en l'utilisant l'astuce suivante permettra d'atténuer les problèmes d'inclusion.

                      // Définir la variable d'environnement pour GD
                      putenv('GDFONTPATH=' . realpath('.'));
                      
                      // Nommez la police à utiliser (Notez l'absence de l'extension .ttf)
                      $font = 'SomeFont';



                      • 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 juin 2019 à 15:28:23

                        J'ai essayé : pas de changement...

                        <?php
                        	// Create the captcha's image
                        
                        	$sizex = 100;
                        	$sizey = 40;
                        	$img = @imagecreatetruecolor($sizex, $sizey) or die('Impossible de créer un flux d\'image GD');
                        
                        	$fill_color = imagecolorallocate($img, 100, 150, 200);
                        	imagefilledrectangle($img, 0, 0, $sizex, $sizey, $fill_color);
                        
                        	$size = 18;
                        	$inclinaison = 0;
                        	$firstcharx = 10;
                        	$firstchary = 10;
                        	$text_color = imagecolorallocate($img, 255, 255, 0);
                        
                        	// .-#*|*#-. Define the GD's environnement variable .-#*|*#-.
                        	putenv('GDFONTPATH=' . realpath('.'));
                        	// .-#*|*#-. Name the font to use (Note the absence of the .ttf extension) .-#*|*#-.
                        	$fontfile = '1942-webfont';
                        
                        	//imagettftext($img, $size, $inclinaison, $firstcharx, $firstchary, $text_color, $fontfile, $_SESSION['captcha']);
                        		$fontsize1_5 = 5;
                        		imagestring($img, $fontsize1_5, $firstcharx, $firstchary, $_COOKIE['captcha'], $text_color);
                        	
                        	header("Content-type:image/png");
                        	imagepng($img);
                        	imagedestroy($img);
                        ?>



                        • Partager sur Facebook
                        • Partager sur Twitter

                        "La chance sourit aux esprits préparés" - Louis Pasteur

                          22 juin 2019 à 13:11:52

                          Puisqu'aucune autre solution ne semble émerger pour le moment, à tout hasard : existe-t-il une autre fonction permettant de transformer un texte en image (avec la possibilité de choisir sa propre police sur par exemple https://www.fontsquirrel.com), ou bien dois-je créer une application/fonction le permettant...? (Beau défi, ceci dit)

                          NB : je n'ai pour le moment vraiment pas envie de donner mon âme à Google en faisant appel à son noCaptcha/reCaptcha >_<

                          -
                          Edité par C'Me 22 juin 2019 à 13:14:09

                          • Partager sur Facebook
                          • Partager sur Twitter

                          "La chance sourit aux esprits préparés" - Louis Pasteur

                            29 juin 2019 à 22:10:27

                            Toujours pas de solution à me proposer (pour le moment, je sèche toujours....) ? :euh:
                            • Partager sur Facebook
                            • Partager sur Twitter

                            "La chance sourit aux esprits préparés" - Louis Pasteur

                              6 juillet 2019 à 14:40:55

                              Toujours pas de solution à me proposer (pour le moment, je sèche toujours....) ? :euh:

                              Existe-t-il une fonction javascript comparable à imagettftext que je pourrais utiliser dans un script pour contourner ce problème ?

                              -
                              Edité par C'Me 7 juillet 2019 à 11:14:12

                              • Partager sur Facebook
                              • Partager sur Twitter

                              "La chance sourit aux esprits préparés" - Louis Pasteur

                                19 juillet 2019 à 14:51:15

                                Lartak, Lamecarlate, Ryukotsei : êtes-vous trop occupés ou à court de solutions ? Quelqu'un d'autre peut-il me venir en aide ?

                                -
                                Edité par C'Me 19 juillet 2019 à 14:53:04

                                • Partager sur Facebook
                                • Partager sur Twitter

                                "La chance sourit aux esprits préparés" - Louis Pasteur

                                  19 juillet 2019 à 15:03:22

                                  Personnellement je ne sais pas trop quoi te dire si ce que nous avons pu te proposer ne permet pas de résoudre ton problème.

                                  À vrai dire, ce n'est pas trop mon fort ce genre de script sur la création d'image avec notamment l'utilisation d'une police spécifique et je trouve assez dé-sué de vouloir créer un captcha alors que par exemple il existe ReCAPTCHA de Google et/ou probablement des librairies correspondantes disponibles pour PHP.

                                  Donc désolé mais je ne peux personnellement pas t'aider plus.

                                  • 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 juillet 2019 à 15:20:26

                                    Salut,

                                    Tu peux charger une font avec imageloadfont(), mais ce ne sont que des fonts au format .gdf car pour manipuler tu utilises la lib GD. Tu peux convertir tes ttf en gdf via un programme. Cherche wftopf.

                                    En utilisant le code de la doc:

                                    // Create a new image instance
                                    $im = imagecreatetruecolor(50, 20);
                                    $black = imagecolorallocate($im, 0, 0, 0);
                                    $white = imagecolorallocate($im, 255, 255, 255);
                                    
                                    // Make the background white
                                    imagefilledrectangle($im, 0, 0, 49, 19, $white);
                                    
                                    // Load the gd font and write 'Hello'
                                    $font = imageloadfont('./FiraMono.gdf');
                                    imagestring($im, $font, 0, 0, 'Hello', $black);
                                    
                                    // Output to browser
                                    header('Content-type: image/png');
                                    
                                    imagepng($im);
                                    imagedestroy($im);
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      20 juillet 2019 à 20:26:39

                                      Lartak a écrit:

                                      Personnellement je ne sais pas trop quoi te dire si ce que nous avons pu te proposer ne permet pas de résoudre ton problème.

                                      À vrai dire, ce n'est pas trop mon fort ce genre de script sur la création d'image avec notamment l'utilisation d'une police spécifique et je trouve assez dé-sué de vouloir créer un captcha alors que par exemple il existe ReCAPTCHA de Google et/ou probablement des librairies correspondantes disponibles pour PHP.

                                      Donc désolé mais je ne peux personnellement pas t'aider plus.


                                      Merci Lartak. Je comprends ta position.

                                      Personnellement, je n'ai pour l'instant que des ambitions modestes, pour ne pas dire personnelles quant à la création. Les enjeux m'autorisent donc à avoir cette lubie de créer un Captcha. Mais j'avoue néanmoins prendre position en ne m'en remettant pas à Google quant à leur ReCAPTCHA dont l'algorithme demeure secret, sachant néanmoins qu'ils "lisent" d'une certaine manière nos frappes au clavier. Cette entreprise n'est pas un modèle de respect de la vie privée... Si quelqu'un crée ou connaît un Captcha plus ou moins aussi simple et sécurisé, géré par un prestataire dépositaire d'une charte éthique claire, alors OK (mais je sors un peu du cadre de ma requête, là)....

                                      ____________________________________________________________________________

                                      Merci xoxotf ! Je vois ça dans la soirée ou demain !

                                      -
                                      Edité par C'Me 20 juillet 2019 à 20:28:29

                                      • Partager sur Facebook
                                      • Partager sur Twitter

                                      "La chance sourit aux esprits préparés" - Louis Pasteur

                                      imagettftext

                                      × 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