Home  >  Article  >  php教程  >  php做饼图的函数(转)

php做饼图的函数(转)

WBOY
WBOYOriginal
2016-06-21 09:13:141091browse

饼图|函数

php做饼图的函数
作者:qdlover   发表日期:2000年9月15日   阅读次数:14
--------------------------------------------------------------------------------

再介绍一下我自己,呵呵
我是个新手,当时学php纯粹是为了应付领导哦,让我们做统计图,我本来是学asp的,突然改行很不适应,不过php功能的确很强大呀,呵呵,我都离不了他了,这不,饼图,柱型图都搞定了,可是还有很多问题我不会,还希望大家多指教呀,说了好多废话了,我还以为是在写信那
我的联系方式是:
               email:qingdaohb@yeah.net
               http://qdlover.yeah.net
老板催了,没办法,饼图函数出炉了,大家快抢呀

########
bimage.php3
########

/*
函数说明
$chartdata:数据,是数组元素
$chartfont:字号
$chartdiameter:决定饼的大小(要看你饿不饿了,呵呵)
$chartlabel:标题,也是数组元素
$colorslice:颜色数组,例如$tmp=array255,255,255);$colorslic=array($tmp);
$colorborder:边框颜色,数组
$colortext :文本颜色,数组
$colorbody:背景颜色,数组
$file:输出图片文件名*/
function bimage($chartdata,
                $chartfont,
                $chartdiameter ,
                $chartlabel ,
                $colorslice,
                $colorbody ,
                $colorborder,
                $colortext ,
                $file
                )
{
$chartdiameter=150;

     $chartfontheight=imagefontheight($chartfont);
     $d1=10;$d2=20;$d3=30;$d4=40;$d5=50;
     $chartdata=array($d1,$d2,$d3,$d4,$d5);
     $chartlabel=array("D1","D2","D3","D4","D5");
     $chartwidth=$chartdiameter+20;
     $chartheight=$chartdiameter+20+(($chartfontheight+2)*count($chartdata));
     header("content-type:image/gif");
     $image=imagecreate($chartwidth,$chartheight);
$colorbody =imagecolorallocate ($image,$colorbody[0],$colorbody[1],$colorbody[2]);
$colortext =imagecolorallocate ($image,$colortext[0],$colortext[1],$colortext[2]);
$colorborder =imagecolorallocate ($image,$colorborder[0],$colorborder[1],$colorborder[2]);
for ($i=0;$i{
$t=imagecolorallocate($image,$colorslice[$i][0],$colorslice[$i][1],$colorslice[$i][2]);
$colorslice[$i]=$t;
}




     for($i=0;$i     {
     $charttotal+=$chartdata[$i];
     }
     $chartcenterx=$chartdiameter/2+10;
     $chartcentery=$chartdiameter/2+10;
    $degrees=0;
    for($i=0;$i    {
    $startdegrees=round($degrees);
    $degrees+=(($chartdata[$i]/$charttotal)*360);
    $enddegrees=round($degrees);
    $currentcolor=$colorslice[$i%(count($colorslice))];
    imagearc($image ,
             $chartcenterx,
             $chartcentery,
             $chartdiameter,
             $chartdiameter,
             $startdegrees,
             $enddegrees,
             $currentcolor);
             list($arcx,$arcy)=circle_point($startdegrees,$chartdiameter);

             imageline($image,
                       $chartcenterx,
                       $chartcentery,
                       floor($chartcenterx+$arcx),
                       floor($chartcentery+$arcy),
                       $currentcolor );
             list($arcx,$arcy)=circle_point($enddegrees,$chartdiameter);

             imageline($image,
                       $chartcenterx,
                       $chartcentery,
                       ceil($chartcenterx+$arcx),
                       ceil($chartcentery +$arcy),
                       $currentcolor);

             $midpoint=round((($enddegrees-$startdegrees)/2)+$startdegrees);
             list($arcx,$arcy)= circle_point ( $midpoint, $chartdiameter/2);
             imagefilltoborder($image,
                               floor($chartcenterx+$arcx),
                               floor($chartcentery+$arcy),
                               $currentcolor,
                               $currentcolor);
     }
     imagearc($image,
              $chartcenterx,
              $chartcentery,
              $chartdiameter,
              $chartdiameter,
              0,360,
              $colorborder);
     imagefilltoborder ($image,
                        floor($chartcenterx +( $chartdiameter /2)+2),
                        $chartcentery ,
                        $colorborder,
                        $colorborder );
      for ($i=0;$i      {
      $currentcolor=$colorslice[$i%(count($colorslice))];
      $liney=$chartdiameter+20+($i*($chartfontheight+2));
      imagerectangle ($image,
                      10,
                      $liney,
                      20+$chartfontheight,
                      $liney+$chartfontheight,
                      $colorbody);
      imagefilltoborder($image,
                       12,
                       $liney+2,
                       $colorbody,
                       $currentcolor);
      imagestring($image,
                  $chartfont,
                  40+$chartfontheight,
                  $liney,
                  "$chartlabel[$i]:$chartdata[$i]",
                  $colortext);

      }


         imagegif ($image,$file);

}

function radians($degrees)
     {
     return($degrees*(pi()/180.0));
     }
function circle_point($degrees,$diameter)
     {
     $x=cos(radians($degrees))*($diameter/2);
     $y=sin(radians($degrees))*($diameter/2);
     return (array($x,$y));
     }
            ?>
###########
这是一个调用的例子
###########


include("bfunc.php3");
$chartdiameter=250;
     $chartfont=5;
     $d1=10;$d2=20;$d3=30;$d4=40;$d5=50;
     $chartdata=array($d1,$d2,$d3,$d4,$d5);
     $chartlabel=array("D1","D2","D3","D4","D5");

     $colorbody=array(0xff,0xff,0xff);
     $colorborder=array(0x00,0x00,0x00);
     $colortext=array(0xff,0xff,0xff);

     $color1=array(0xff,0x00,0x00);
     $color2=array(0x00,0xff,0x00);
     $color3=array(0x00,0x00,0xff);
     $color4=array(0xff,0xff,0x00);
     $color5=array(0xff,0x00,0xff);
     $colorslice=array($color1 ,$color2,$color3,$color4,$color5);
$file="tj.gif"
bimage($chartdata,
       $chartfont,
       $chartdiameter ,
       $chartlabel ,
       $colorslice,
       $colorbody ,
       $colorborder,
       $colortext ,
       $file       )
?>


【奥索网版权所有,如需转载,请注明出处】    



Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn