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] prob. affichage imagepng


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre régulier
    Inscrit en
    Janvier 2004
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 81
    Points : 77
    Points
    77
    Par défaut [GD] prob. affichage imagepng
    Bonjour, je suis en train d'essayer de réaliser un captcha pour sécuriser un de mes formulaire Web contre le spam. Dans la faq php, j'ai trouver comment générer un captcha en utilisant la librairie GD:
    http://php.developpez.com/faq/?page=securite#captcha

    Malheureusement, la dernière partie du code (création de l'image complète au format PNG) ne me renvoi pas l'image désiré mais affiche un grand charabia du style:

    ‰PNG  IHDR–21îµM IDATxœìÚwŸS‡0j¦£ÓzïšMS(Æ0à’8În²I6»¹É¶ìnÞÝM²¶ãÄ%Ƹ`Œm0`Ó‹©¦L1mÓË0½hÔ{=::’Þ?¿ß}>ǘ¶ýZôÿûÿ2ˆrýÈ'×…ðI±) Öôm…[T/È['u9õêþ¿•¶©¦õÆÓ××ÌÃñkË2½ê7uuT}û^dµT[1‹*)± O²õ2H~øXYqe/Eyó
    ...
    ªbP& S”EX)§h»*KËÅ•y›êÎáCÒ»‚ç‘Ù÷eŠûY1Þ]÷@)YñŸ9¦ð¶BVu}¹nž‰•9*Í^úòÛ*æõ×~{ÇÙ çK¦À©×:ë%ÿOÊþ_ï Vw ²çØIEND®B`‚

    Apparement, c'est la fonction imagepng qui ne me retourne pas ce que j'attends.... merci de me donner un coup de main...

  2. #2
    Membre régulier
    Inscrit en
    Janvier 2004
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 81
    Points : 77
    Points
    77
    Par défaut
    Bon en faite, j'avais integré le script dans une page html. Il faut que le script soit "tout seul" dans une page php.

    Ceci dit, l'image générée n'est pas celle que j'attendais (voir http://www.swisspanel.ch/net/subscri...mg_captcha.php) !?

  3. #3
    Membre du Club
    Inscrit en
    Février 2007
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Février 2007
    Messages : 45
    Points : 42
    Points
    42
    Par défaut
    Ne serait-ce pas un problème de "header" ? Cette erreur est classique quand on oubli la ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header ("Content-type: image/png");
    Peut-être que si tu affichais ton code cela aiderait à trouver une éventuelle erreur...

  4. #4
    Membre régulier
    Inscrit en
    Janvier 2004
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 81
    Points : 77
    Points
    77
    Par défaut
    Bonjour,

    Le code est exactement celui qui se trouve sous http://php.developpez.com/faq/?page=securite#captcha, donc:

    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
     
    <?php
     
    $length = 5; // Longueur de la chaîne générée en image
    $alphabet = 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789'; // Liste des caractères possibles
    $nb_characters = strlen($alphabet); // Nombre de caractères possibles
     
    // La variable code contient la chaîne qui sera générée en image
    $string = '';
    for($i = 0; $i < $length; ++$i)
    {
        $string .= $alphabet[mt_rand(0, $nb_characters-1)];
    }
     
    // Récupération de la longueur de la chaine à afficher
    $str_length = strlen($string);
     
    // Création de la zone image en fonction de la longueur de texte à afficher
    $image = imagecreatetruecolor(30 * $str_length, 50);
     
    // Création du fond de l'image
    for($x = 0; $x < imagesx($image); ++$x)
    {
        for($y = 0; $y < imagesy($image); ++$y)
        {
            if (mt_rand(1,5) == 4 )
            {
                $vred = mt_rand(0, 100);
                $vgreen = mt_rand(0, 100);
                $vblue = mt_rand(0, 100);
            }
            else
            {
                $vred = mt_rand(100, 150);
                $vgreen = mt_rand(100, 150);
                $vblue = mt_rand(100, 150);
            }
     
            // Allocation d'une couleur au fond
            $color = imagecolorallocate($image, $vred, $vgreen, $vblue);
     
            // Affichage d'un pixel ayant la couleur du fond
            imagesetpixel($image, $x, $y, $color);
     
            // Suppression de la couleur du fond allouée
            imagecolordeallocate($image, $color);
        }
    }
     
    // Création de la bordure
    $vred = mt_rand(0, 240);
    $vgreen = mt_rand(0, 240);
    $vblue = mt_rand(0, 240);
     
    // Allocation d'une couleur à la bordure
    $color = imagecolorallocate($image, $vred, $vgreen, $vblue);
     
    // Tracé de la bordure
    imagerectangle($image, 0, 0, imagesx($image)-1 , imagesy($image)-1, $color);
     
    // Suppression la couleur de la bordure allouée
    imagecolordeallocate($image, $color);
     
    // Création du texte
    for($i = 0; $i < $str_length; ++$i)
    {
        $vred = mt_rand(150, 240);
        $vgreen = mt_rand(150, 240);
        $vblue = mt_rand(150, 240);
     
        $size = mt_rand(20, 30);
        $angle = mt_rand(-10, 20);
        $x = 13 + (20 * $i);
        $y = mt_rand(30, imagesy($image) - 10);
        $color = imagecolorallocate($image, $vred, $vgreen, $vblue);
        $font = 'comic.ttf';
     
        // Dessin du texte
        imagettftext($image, $size, $angle, $x, $y, $color, $font, $string[$i]);
     
        // Suppression de la couleur du texte allouée
        imagecolordeallocate($image, $color);
    }
     
    // Création de l'image complète au format PNG
    header("Content-type: image/png");
    imagepng($image);
    ?>
    Et le résultat se trouve sous :
    http://www.swisspanel.ch/net/subscri...mg_captcha.php

    Apparemment, une image s'affiche, mais il y a apparement encore un petit problème... (peu être la police, ???). A suivre...

  5. #5
    Membre régulier
    Inscrit en
    Janvier 2004
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 81
    Points : 77
    Points
    77
    Par défaut
    C'etait effectivvement un problème de police (fichier xxx.ttf).

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

Discussions similaires

  1. Prob affichage recherche avec Tkinter
    Par steph70 dans le forum Tkinter
    Réponses: 20
    Dernier message: 09/10/2009, 07h00
  2. prob affichage dell
    Par chawarma dans le forum Windows XP
    Réponses: 2
    Dernier message: 18/07/2008, 15h00
  3. prob affichage valeur numerique
    Par regis_65 dans le forum Excel
    Réponses: 4
    Dernier message: 20/06/2008, 11h35
  4. Prob affichage resultat requete
    Par offspring dans le forum VB.NET
    Réponses: 1
    Dernier message: 13/10/2007, 23h18
  5. prob affichage mot en gras dans un texte
    Par klik dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 13/07/2005, 08h38

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