Sloupcový graf pomocí GD knihovny - ukázka zdrojového kódu zdrojový kód

<?
/**************************************************************************/
/*                        Program: Sloupcový graf                         */
/*                          Verze: 1.1                                    */
/*                          Autor: Jan Schmied                            */
/*                         E-mail: honzas@digitals.cz                     */
/*                            ICQ: 297-841-982                            */
/*                        Licence: Freeware, Opensource                   */
/*                                                                        */
/*       Program je určen k vytváření slopcových grafů do obrázku         */
/*       ve formatu jpeg/png/gif. Kvalita grafu je ovlivněna GD           */
/*       knihovnou, takže na některých místech (hlavně kolem textů)       */
/*       je graf rozmazaný.                                               */
/*                                                                        */
/**************************************************************************/

//parametry grafu
$nazev="Pokusný graf"//název grafu
$format="jpeg"// jpeg/png/gif
$prvky=array(
             array(
20,"Leden"),
             array(
24,"Únor"),
             array(
48,"Březen"),
             array(
58,"Duben"),
             array(
62,"Květen"),
             array(
66,"Červen"),
             array(
74,"Červenec"),
             array(
80,"Srpen"),
             array(
85,"Záři"),
             array(
88,"Říjen"),
             array(
92,"Listopad"),
             array(
99,"Prosinec"),
             ); 
//hodnoty grafu, 1. hodnota (int) 2. název sloupce (string)

 //vodcaď dolů už se v tom nehrabte :)






//funkce pro diakritiku
function ISOget($vstup_str)
{
  return 
StrTr($vstup_strchr(138).chr(141).chr(142).chr(154).chr(157).chr(158),
                        
chr(169).chr(171).chr(174).chr(185).chr(187).chr(190));
}

function 
set_slope($im,$hodnota,$jmeno,$poradi,$max){

 
$x1=70*$poradi+40*($poradi-1);
 
$x2=$x1+80;
 
 
$hod=$hodnota;
 
 
$bod=3.2;    //rozsahy (beta)
 
if ($max>100){
  
$bod=0.32;
  
$hod=$hod/pow(10,strlen($max)-1);

 }
 
$y=370-number_format($bod*$hodnota);
 
 
$points=array($x1,370,$x2,370,$x2,$y,$x1,$y);

 
$colours=array(imagecolorallocate($im,255,0,0),  //červená
               
imagecolorallocate($im,0,255,0),   //zelená
               
imagecolorallocate($im,0,0,255),   //modrá
               
imagecolorallocate($im,255,255,0), //žlutá
               
imagecolorallocate($im,0,255,255), //cyan?
               
imagecolorallocate($im,255,0,255), //magnetta?
               
imagecolorallocate($im,0,0,0),     //černá
               
imagecolorallocate($im,255,255,255),//bílá
               
); 
 
 
$countcol=count($colours);       //pocty barev a opakování
 
while($poradi $countcol)
  
$poradi $poradi $countcol

 
$textimagecolorallocate($im,0,0,0);         //barva textů      
 
imagefilledpolygon($im,$points,4,$colours[$poradi-1]);  //sloupce
 
imagestring($im,5,$x1+20,$y-20,$hodnota,$text);  //hodnota nad grafem
 
imagestring($im,5,$x1+10,375,ISOget($jmeno),$text); //jmeno pod grafem

}

header ("Content-type: image/".$format);
$width=400
$height=110*(count($prvky))+110;
$lines=370;

$im=imagecreate($height,$width);
$background imagecolorallocate($im150,150,150); //pozadi
$lineimagecolorallocate($im,78,78,78);  //barva linek
$textimagecolorallocate($im,0,0,0);




imagestring($im,5,10,($lines-320)-8,"100",$text);        //linky a cisla u nich
imageline($im40$lines-320$height-40$lines-320$line );

imagestring($im,5,10,($lines-240)-8,"75".$f,$text);
imageline($im40$lines-240$height-40$lines-240$line );

imagestring($im,5,10,($lines-160)-8,"50".$f,$text);
imageline($im40$lines-160$height-40$lines-160$line );

imagestring($im,5,10,($lines-80)-8,"25".$f,$text);
imageline($im40$lines-80$height-40$lines-80$line );

imagestring($im,5,10,362,"0",$text);
imageline($im40$lines$height-40$lines$line );

imagestring($im,5,10,10,ISOget($nazev),$text);
 
$max=$prvky[0][0];                  // maximalni cislo pro urceni rozsahu
for ($i=1;$i<count($prvky);$i++){
 if (
$max<$prvky[$i][0])
  
$max=$prvky[$i][0];
}
for (
$i=0;$i<count($prvky);$i++)      // vykresleni sloupcu
   
set_slope($im,$prvky[$i][0],$prvky[$i][1],$i+1,$max);

if (
$format=="jpeg")   //format obraku
imagejpeg($im);
elseif (
$format=="png")
imagepng($im);
elseif (
$format=="gif")
imagegif($im);

imagedestroy($im);

?>
Vložil/Poslal/Autor: Jan Schmied
Funkčnost: běží na straně serveru, nemělo by záležet na typu prohlížeče
zavřít okno | jít na hlavní stránku JakNaWeb.com