Heim  >  Artikel  >  php教程  >  如何用PHP制作“饼图”函数?

如何用PHP制作“饼图”函数?

WBOY
WBOYOriginal
2016-06-21 09:02:02994Durchsuche

 

########

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 )

?>

 



Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn