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] Localisation d'une image.


Sujet :

Bibliothèques et frameworks PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Palsajicoco
    Étudiant
    Inscrit en
    Février 2007
    Messages
    229
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 229
    Par défaut [GD] Localisation d'une image.
    Salut,
    Ma page consiste a creer une liste (combobox) et a chaque fois qu'on selectionne une option de cette liste une image doit apparaitre qui donne des statisqtiques. Cette image est un camembert. La creation du camembert fonctionne correctement avec mes données, pour la liste aussi c'est la meme chose, mais quand j'execute les deux scripts en meme temps je ne vois qu'un seul s'executer. Si je commente l'affichage du camembert la liste apparait et si je decommente le camembert il s'affiche et la liste disparait!
    Il me semble que l'affichage de l'image est superposé avec ma liste de facon lors de l'affichage l'image masque la liste. J'ai cherché beaucoups dans les tutoriels comment je peux changer la localisation de mon image mais la je trouve rien. voila mon code:
    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
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    <?
    function camembert($arr)
    {	
       $size=3;                  /* taille de la police, largeur du caractère */
       $ifw=imagefontwidth($size);							
     
       $w=500;                   /* largeur de l'image */
       $h=250;                   /* hauteur de l'image */
       $a=120;                   /* grand axe du camembert */
       $b=$a/2;                  /* 60 : petit axe du camembert */
       $d=$a/2;                  /* 60 : "épaisseur" du camembert */
       $cx=$w/2-1;               /* abscisse du "centre" du camembert */
       $cy=($h-$d)/2;            /* 95 : ordonnée du "centre" du camembert */
     
       $A=138;                   /* grand axe de l'ellipse "englobante" */
       $B=102;                   /* petit axe de l'ellipse "englobante" */
       $oy=-$d/2;                /* -30 : du "centre" du camembert à celui de l'ellipse "englobante"*/
       $img=imagecreate($w,$h);  
       $bgcolor=imagecolorallocate($img,0xCD,0xCD,0xCD);	
       imagecolortransparent($img,$bgcolor); 
       $black=imagecolorallocate($img,0,0,0);
                                 /* calcule la somme des données */
       for ($i=$sum=0,$n=count($arr);$i<$n;$i++) $sum+=$arr[$i][0];	
     
       /* fin des préliminaires : on peut vraiment commencer! */
       for ($i=$v[0]=0,$x[0]=$cx+$a,$y[0]=$cy,$doit=true;$i<$n;$i++) {														
          for ($j=0,$k=16;$j<3;$j++,$k-=8) $t[$j]=($arr[$i][1]>>$k) & 0xFF;
                                 /* détermine les "vraies" couleurs */
          $color[$i]=imagecolorallocate($img,$t[0],$t[1],$t[2]);
                                 /* calcule l'angle des différents "secteurs" */
          $v[$i+1]=$v[$i]+round($arr[$i][0]*360/$sum);	
     
          if ($doit) {           /* détermine les couleurs "ombrées" */
             $shade[$i]=imagecolorallocate($img,max(0,$t[0]-50),max(0,$t[1]-50),max(0,$t[2]-50)); 
     
             if ($v[$i+1]<180) { /* calcule les coordonnées des différents parallélogrammes */
                $x[$i+1]=$cx+$a*cos($v[$i+1]*M_PI/180);		
                $y[$i+1]=$cy+$b*sin($v[$i+1]*M_PI/180);	
             }										
             else {
                $m=$i+1;
                $x[$m]=$cx-$a;   /* c'est comme si on remplaçait $v[$i+1] par 180° */
                $y[$m]=$cy;	
                $doit=false;     /* indique qu'il est inutile de continuer! */
             }
          }
       }
     
       /* dessine la "base" du camembert */
       for ($i=0;$i<$m;$i++) imagefilledarc($img,$cx,$cy+$d,2*$a,2*$b,$v[$i],$v[$i+1],$shade[$i],IMG_ARC_PIE);
     
       /* dessine la partie "verticale" du camembert */														
       for ($i=0;$i<$m;$i++) {						
          $area=array($x[$i],$y[$i]+$d,$x[$i],$y[$i],$x[$i+1],$y[$i+1],$x[$i+1],$y[$i+1]+$d);
          imagefilledpolygon($img,$area,4,$shade[$i]);			
       }
     
       /* dessine le dessus du camembert */
       for ($i=0;$i<$n;$i++) imagefilledarc($img,$cx,$cy,2*$a,2*$b,$v[$i],$v[$i+1],$color[$i],IMG_ARC_PIE);
       /*imageellipse($img,$cx,$cy-$oy,2*$A,2*$B,$black);	// dessine l'ellipse "englobante" */
     
       /* dessine les "flêches" et met en place le texte */
       for ($i=0,$AA=$A*$A,$BB=$B*$B;$i<$n;$i++) if ($arr[$i][0]) {
          $phi=($v[$i+1]+$v[$i])/2;       
                                 /* intersection des "flêches" avec l'ellipse "englobante" */
          $px=$a*3*cos($phi*M_PI/180)/4;		
          $py=$b*3*sin($phi*M_PI/180)/4;		
                                 /* équation du 2ème degré avec 2 racines réelles et distinctes */	
          $U=$AA*$py*$py+$BB*$px*$px;         
          $V=$AA*$oy*$px*$py;						
          $W=$AA*$px*$px*($oy*$oy-$BB);	
                                 /* calcule le pourcentage à afficher */
          $value=number_format(100*$arr[$i][0]/$sum,2,",","")."%";
                                 /* écrit le texte à droite */	
          if ($phi<90 || $phi>270) {          
             $root=(-$V+sqrt($V*$V-$U*$W))/$U;
             imageline($img,$px+$cx,$py+$cy,$qx=$root+$cx,$qy=$root*$py/$px+$cy,$black);
             imageline($img,$qx,$qy,$qx+10,$qy,$black);		
     
             imagestring($img,$size,$qx+14,$qy-12,$arr[$i][2],$black);
             imagestring($img,$size,$qx+14,$qy-2,$value,$black);
          }
          else {                 /* écrit le texte à gauche */
             $root=(-$V-sqrt($V*$V-$U*$W))/$U;
             imageline($img,$px+$cx,$py+$cy,$qx=$root+$cx,$qy=$root*$py/$px+$cy,$black);
             imageline($img,$qx,$qy,$qx-10,$qy,$black);		
     
             imagestring($img,$size,$qx-12-$ifw*strlen($arr[$i][2]),$qy-12,$arr[$i][2],$black);
             imagestring($img,$size,$qx-12-$ifw*strlen($value),$qy-2,$value,$black);
          }
       }
       header("Content-type: image/png");
       imagepng($img);
       imagedestroy($img);
    }
          function listbox ( $name , $array_value = array() , $array_selected , $multiple = 0 , $size = 1 )
        {
            $select = '<select' . ( ( $multiple == 1 ) ? ' multiple name="' . $name . '[]"' : ' name="' . $name . '"' ) . 
    ' size="' . $size . '">' . "n" ;
     
                foreach ( $array_value as $key => $value )
                {
                    $select .= '<option value="' . $key . '"' .
                    ( ( $multiple == 1 ) ? ( in_array ( $key , $array_selected ) ? ' selected="selected"' : '' ) : 
    ( $key == $array_selected ? ' selected="selected"' : '' ) ) .
                    '>' . $value . '</option>' . "n" ;
                }
     
            $select .= '</select>' ;
     
            return $select ;
        }
     
    if(isset($_POST['ET']))
    {
    //camembert($ET_data[$_POST['ET']]); 
    }
                             /* enjoy! */
    ?>
    <form action='' method='post'>
    <?php
    echo listbox ( 'ET' , $tableau , ( isset ( $_POST['ET'] ) ? $_POST['ET'] : 4 ) ) ;
    ?> 
    <input type='submit' value='Afficher Camembert'/>  
    </form>
    La fonction camembert prend un tableau comme entrée et l'affiche sous forme d'image. La fonction listbox permet de creer la liste a partir d'un tableau. Je ne suis pas sur a propos de l'identification du probleme que j'ai proposée mais elle ma parue logique puisque chaque script s'execute correctement chacun a part.
    Merci d'avance pour l'aide ^^'

    Edit:
    L'erreur affichée lors de l'affichage du camembert avec la liste est la suivante:
    Warning: Cannot modify header information - headers already sent by (output started at e:\program files\easyphp1-8\www\nouveau dossier\new 16.php:143) in e:\program files\easyphp1-8\www\nouveau dossier\new 16.php on line 92
    Et je voulais dire que si je desactive l'affichage du camembert dans la boucle if et j'affiche tout court le tableau demandé par valeurs dans la fonction affichage du camembert il s'affiche correctement avec la liste.

  2. #2
    Membre émérite Avatar de micetf
    Homme Profil pro
    Professeur des Ecoles
    Inscrit en
    Mai 2009
    Messages
    557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Professeur des Ecoles
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2009
    Messages : 557
    Par défaut
    Bonjour,

    Pour faire ce que tu veux faire,
    tu dois dire que tu veux insérer une image dans ton html (balise <img>),
    image dont la source est générée par ta fonction camembert().
    C'est à dire un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <img src="<?php camembert($ET_data[$_POST['ET']]); ?>" />
    Fred

  3. #3
    Membre éclairé Avatar de Palsajicoco
    Étudiant
    Inscrit en
    Février 2007
    Messages
    229
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 229
    Par défaut
    Merci pour la reponse.
    J'ai inseré ta balise, il maffiche plus d'erreurs mais il maffiche pas aussi mon image, en effet il m'affiche des caracteres speciaux
    õ›ÙGI‰Ñ«¥Þ_ÛÂçÝ›¿ñ7À½Ð…¿ˆÿ¸ŽÎõÞ;w7—#¦/LŸéý„Þ{)hÆ/邟Ã_§ôçÇýnîôjÚû)½-üýd·kèÂ÷à?¶rz8ûD®žªôž#«§‡±û¬Ÿ ôÓ²§B߉÷ÃS¡ïiýì1¡oÆ/1ú&üâñ¢¯Æ¿8ZRôbņ7·¹¥Kÿž"Ýe±ùï$Mú,ÍÒ¥÷¾ ÛþšºÙAߘ³ÓÇvÒI'ôÃÓ÷\ØwÐc³]H?#²—JNõSÓá/µôýÌtxãK-}?5ÝøRMßÏLG7¾TÓwøØK=CG½Ô3ôSÓ±/csÒ¿ÆÖ{lì(@¹®¡CÇ›: L®mèÀ±Ç†z’ëºÙUÊ1•œ @®sè±Ç&ÎF\®uèFÜ®X.lW-µ+—Knu±i/#&×>t#6÷ج·"bz3òÚÞ&øÜcƒV$°=6g]“)û=ç•+}lƦ±ÇFlÍnx‚eä´p³«õ±—¾?ñ±—&ð±—.+ñ±—8o»ßܼ9-¼Íbóc/N>^~ìE¡ó%ö†a†a†a†a†a†a†a†a˜Iþõj– w4•IEND®B`‚" />
    J'ai bien pu ameliorer un tout petit peu mon code afin d'eviter l'erreur, en effet j'ai supprimé la fonction camembert et j'ai inseré son code directement dans la boucle if et ca m'affiche ma liste et quand je choisis il me redirige vers l'image correcte mais la liste disparait, Il faut toujours revenir a la page precedente pour la liste et choisir une autre tache. comme ca il marche toujours. Mais moi je veux que ca soit dans une seule page.
    voila la boucle if modifiée:
    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
    89
    90
    91
    92
    93
    94
    95
    if(isset($_POST['ET']))
    {
    $arr=$ET_data[$_POST['ET']];
    $size=3;                  /* taille de la police, largeur du caractère */
       $ifw=imagefontwidth($size);							
     
       $w=500;                   /* largeur de l'image */
       $h=250;                   /* hauteur de l'image */
       $a=120;                   /* grand axe du camembert */
       $b=$a/2;                  /* 60 : petit axe du camembert */
       $d=$a/2;                  /* 60 : "épaisseur" du camembert */
       $cx=$w/2-1;               /* abscisse du "centre" du camembert */
       $cy=($h-$d)/2;            /* 95 : ordonnée du "centre" du camembert */
     
       $A=138;                   /* grand axe de l'ellipse "englobante" */
       $B=102;                   /* petit axe de l'ellipse "englobante" */
       $oy=-$d/2;                /* -30 : du "centre" du camembert à celui de l'ellipse "englobante"*/
       $img=imagecreate($w,$h);  
       $bgcolor=imagecolorallocate($img,0xCD,0xCD,0xCD);	
       imagecolortransparent($img,$bgcolor); 
       $black=imagecolorallocate($img,0,0,0);
                                 /* calcule la somme des données */
       for ($i=$sum=0,$n=count($arr);$i<$n;$i++) $sum+=$arr[$i][0];	
     
       /* fin des préliminaires : on peut vraiment commencer! */
       for ($i=$v[0]=0,$x[0]=$cx+$a,$y[0]=$cy,$doit=true;$i<$n;$i++) {														
          for ($j=0,$k=16;$j<3;$j++,$k-=8) $t[$j]=($arr[$i][1]>>$k) & 0xFF;
                                 /* détermine les "vraies" couleurs */
          $color[$i]=imagecolorallocate($img,$t[0],$t[1],$t[2]);
                                 /* calcule l'angle des différents "secteurs" */
          $v[$i+1]=$v[$i]+round($arr[$i][0]*360/$sum);	
     
          if ($doit) {           /* détermine les couleurs "ombrées" */
             $shade[$i]=imagecolorallocate($img,max(0,$t[0]-50),max(0,$t[1]-50),max(0,$t[2]-50)); 
     
             if ($v[$i+1]<180) { /* calcule les coordonnées des différents parallélogrammes */
                $x[$i+1]=$cx+$a*cos($v[$i+1]*M_PI/180);		
                $y[$i+1]=$cy+$b*sin($v[$i+1]*M_PI/180);	
             }										
             else {
                $m=$i+1;
                $x[$m]=$cx-$a;   /* c'est comme si on remplaçait $v[$i+1] par 180° */
                $y[$m]=$cy;	
                $doit=false;     /* indique qu'il est inutile de continuer! */
             }
          }
       }
     
       /* dessine la "base" du camembert */
       for ($i=0;$i<$m;$i++) imagefilledarc($img,$cx,$cy+$d,2*$a,2*$b,$v[$i],$v[$i+1],$shade[$i],IMG_ARC_PIE);
     
       /* dessine la partie "verticale" du camembert */														
       for ($i=0;$i<$m;$i++) {						
          $area=array($x[$i],$y[$i]+$d,$x[$i],$y[$i],$x[$i+1],$y[$i+1],$x[$i+1],$y[$i+1]+$d);
          imagefilledpolygon($img,$area,4,$shade[$i]);			
       }
     
       /* dessine le dessus du camembert */
       for ($i=0;$i<$n;$i++) imagefilledarc($img,$cx,$cy,2*$a,2*$b,$v[$i],$v[$i+1],$color[$i],IMG_ARC_PIE);
       /*imageellipse($img,$cx,$cy-$oy,2*$A,2*$B,$black);	// dessine l'ellipse "englobante" */
     
       /* dessine les "flêches" et met en place le texte */
       for ($i=0,$AA=$A*$A,$BB=$B*$B;$i<$n;$i++) if ($arr[$i][0]) {
          $phi=($v[$i+1]+$v[$i])/2;       
                                 /* intersection des "flêches" avec l'ellipse "englobante" */
          $px=$a*3*cos($phi*M_PI/180)/4;		
          $py=$b*3*sin($phi*M_PI/180)/4;		
                                 /* équation du 2ème degré avec 2 racines réelles et distinctes */	
          $U=$AA*$py*$py+$BB*$px*$px;         
          $V=$AA*$oy*$px*$py;						
          $W=$AA*$px*$px*($oy*$oy-$BB);	
                                 /* calcule le pourcentage à afficher */
          $value=number_format(100*$arr[$i][0]/$sum,2,",","")."%";
                                 /* écrit le texte à droite */	
          if ($phi<90 || $phi>270) {          
             $root=(-$V+sqrt($V*$V-$U*$W))/$U;
             imageline($img,$px+$cx,$py+$cy,$qx=$root+$cx,$qy=$root*$py/$px+$cy,$black);
             imageline($img,$qx,$qy,$qx+10,$qy,$black);		
     
             imagestring($img,$size,$qx+14,$qy-12,$arr[$i][2],$black);
             imagestring($img,$size,$qx+14,$qy-2,$value,$black);
          }
          else {                 /* écrit le texte à gauche */
             $root=(-$V-sqrt($V*$V-$U*$W))/$U;
             imageline($img,$px+$cx,$py+$cy,$qx=$root+$cx,$qy=$root*$py/$px+$cy,$black);
             imageline($img,$qx,$qy,$qx-10,$qy,$black);		
     
             imagestring($img,$size,$qx-12-$ifw*strlen($arr[$i][2]),$qy-12,$arr[$i][2],$black);
             imagestring($img,$size,$qx-12-$ifw*strlen($value),$qy-2,$value,$black);
          }
       }
       header("Content-type: image/png");
       imagepng($img);
       imagedestroy($img);
    }
    merci ^^'

Discussions similaires

  1. localisation d'objet dans une image
    Par soforan dans le forum Images
    Réponses: 2
    Dernier message: 12/08/2011, 19h38
  2. Localisation d'"objets" dans une image
    Par ammar_diabolo dans le forum OpenCV
    Réponses: 4
    Dernier message: 07/04/2008, 10h36
  3. localiser une image en local
    Par Hayabusa dans le forum Balisage (X)HTML et validation W3C
    Réponses: 13
    Dernier message: 19/05/2007, 10h54
  4. [C#2.0] Localiser une forme dans une image
    Par mister3957 dans le forum C#
    Réponses: 15
    Dernier message: 27/11/2006, 17h08
  5. [MouseEntered] pb de localisation souris pour faire apparaitre une image
    Par sebpsi dans le forum Interfaces Graphiques en Java
    Réponses: 12
    Dernier message: 23/06/2006, 12h03

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