Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > Images > GD
GD Forum d'entraide pour l'extension GD permettant de manipuler des images en PHP. Avant de poster -> tutoriels GD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/04/2007, 15h33   #1
Nouveau Membre du Club
 
Nicolas Portmann
Inscription : janvier 2004
Messages : 81
Détails du profil
Informations personnelles :
Nom : Nicolas Portmann

Informations forums :
Inscription : janvier 2004
Messages : 81
Points : 33
Points : 33
Par défaut 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...
NPortmann est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/04/2007, 16h59   #2
Nouveau Membre du Club
 
Nicolas Portmann
Inscription : janvier 2004
Messages : 81
Détails du profil
Informations personnelles :
Nom : Nicolas Portmann

Informations forums :
Inscription : janvier 2004
Messages : 81
Points : 33
Points : 33
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) !?
NPortmann est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/04/2007, 09h13   #3
Membre à l'essai
 
Inscription : février 2007
Messages : 45
Détails du profil
Informations personnelles :
Âge : 24

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

Code :
header ("Content-type: image/png");
Peut-être que si tu affichais ton code cela aiderait à trouver une éventuelle erreur...
Zakapatul est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/04/2007, 09h31   #4
Nouveau Membre du Club
 
Nicolas Portmann
Inscription : janvier 2004
Messages : 81
Détails du profil
Informations personnelles :
Nom : Nicolas Portmann

Informations forums :
Inscription : janvier 2004
Messages : 81
Points : 33
Points : 33
Bonjour,

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

Code :
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...
NPortmann est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/04/2007, 09h11   #5
Nouveau Membre du Club
 
Nicolas Portmann
Inscription : janvier 2004
Messages : 81
Détails du profil
Informations personnelles :
Nom : Nicolas Portmann

Informations forums :
Inscription : janvier 2004
Messages : 81
Points : 33
Points : 33
C'etait effectivvement un problème de police (fichier xxx.ttf).
NPortmann est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h49.


 
 
 
 
Partenaires

Hébergement Web