Home  >  Article  >  Backend Development  >  Create a super cool PHP data pie chart effect implementation code_PHP tutorial

Create a super cool PHP data pie chart effect implementation code_PHP tutorial

WBOY
WBOYOriginal
2016-07-21 15:23:12786browse

Rendering:
Create a super cool PHP data pie chart effect implementation code_PHP tutorial
Source code:
[code]
//+----------------- -------+
//| pie3dfun.PHP//Public functions|
//+---------------------- --+
define("ANGLE_STEP", 5); //Define the angle step when drawing an elliptical arc
function draw_getdarkcolor($img,$clr) //Find the dark color corresponding to $clr
{
$rgb = imagecolorsforindex($img,$clr);
return array($rgb["red"]/2,$rgb["green"]/2,$rgb["blue"]/2 );
}
function draw_getexy($a, $b, $d) //Find the point coordinates on the ellipse corresponding to angle $d
{
$d = deg2rad($d);
return array(round($a*Cos($d)), round($b*Sin($d)));
}
function draw_arc($img,$ox,$oy, $a,$b,$sd,$ed,$clr) //Elliptic arc function
{
$n = ceil(($ed-$sd)/ANGLE_STEP);
$d = $ sd;
list($x0,$y0) = draw_getexy($a,$b,$d);
for($i=0; $i<$n; $i++)
{
$d = ($d+ANGLE_STEP)>$ed?$ed:($d+ANGLE_STEP);
list($x, $y) = draw_getexy($a, $b, $d);
imageline($img, $x0+$ox, $y0+$oy, $x+$ox, $y+$oy, $clr);
$x0 = $x;
$y0 = $y;
}
}
function draw_sector($img, $ox, $oy, $a, $b, $sd, $ed, $clr) //Draw a sector
{
$ n = ceil(($ed-$sd)/ANGLE_STEP);
$d = $sd;
list($x0,$y0) = draw_getexy($a, $b, $d);
imageline($img, $x0+$ox, $y0+$oy, $ox, $oy, $clr);
for($i=0; $i<$n; $i++)
{
$d = ($d+ANGLE_STEP)>$ed?$ed:($d+ANGLE_STEP);
list($x, $y) = draw_getexy($a, $b, $d);
imageline($img, $x0+$ox, $y0+$oy, $x+$ox, $y+$oy, $clr);
$x0 = $x;
$y0 = $y;
}
imageline($img, $x0+$ox, $y0+$oy, $ox, $oy, $clr);
list($x, $y) = draw_getexy($a/2 , $b/2, ($d+$sd)/2);
imagefill($img, $x+$ox, $y+$oy, $clr);
}
function draw_sector3d($img , $ox, $oy, $a, $b, $v, $sd, $ed, $clr) //3d sector
{
draw_sector($img, $ox, $oy, $a, $b, $sd, $ed, $clr);
if($sd<180)
{
list($R, $G, $B) = draw_getdarkcolor($img, $clr) ;
$clr=imagecolorallocate($img, $R, $G, $B);
if($ed>180) $ed = 180;
list($sx, $sy) = draw_getexy ($a,$b,$sd);
$sx += $ox;
$sy += $oy;
list($ex, $ey) = draw_getexy($a, $b , $ed);
$ex += $ox;
$ey += $oy;
imageline($img, $sx, $sy, $sx, $sy+$v, $clr) ;
imageline($img, $ex, $ey, $ex, $ey+$v, $clr);
draw_arc($img, $ox, $oy+$v, $a, $b, $ sd, $ed, $clr);
list($sx, $sy) = draw_getexy($a, $b, ($sd+$ed)/2);
$sy += $oy+$v /2;
$sx += $ox;
imagefill($img, $sx, $sy, $clr);
}
}
function draw_getindexcolor($img, $clr ) //RBG to index color
{
$R = ($clr>>16) & 0xff;
$G = ($clr>>8)& 0xff;
$B = ($clr) & 0xff;
return imagecolorallocate($img, $R, $G, $B);
}
// Draw the main function and output the image
// $datLst is the data array, $datLst is the label array, $datLst is the color array
// The dimensions of the above three arrays should be equal
function draw_img($datLst,$labLst,$clrLst,$a=250,$ b=120,$v=20,$font=10)
{
$ox = 5+$a;
$oy = 5+$b;
$fw = imagefontwidth($font );
$fh = imagefontheight($font);
$n = count($datLst);//Number of data items
$w = 10+$a*2;
$h = 10+$b*2+$v+($fh+2)*$n;
$img = imagecreate($w, $h);
//Convert RGB to index color
for( $i=0; $i<$n; $i++)
$clrLst[$i] = draw_getindexcolor($img,$clrLst[$i]);
$clrbk = imagecolorallocate($img, 0xff, 0xff, 0xff);
$clrt = imagecolorallocate($img, 0x00, 0x00, 0x00);
//Fill the background color
imagefill($img, 0, 0, $clrbk);
//Sum
$tot = 0;
for($i=0; $i<$n; $i++)
$tot += $datLst[$i];
$sd = 0;
$ed = 0; 333
$ly = 10+$b*2+$v;
for($i=0; $i<$n; $i++)
{
$sd = $ed;
$ed += $datLst[$i]/$tot*360;
//Draw a round cake
draw_sector3d($img, $ox, $oy , $a, $b, $v, $sd, $ed, $clrLst[$i]); //$sd,$ed,$clrLst[$i]);
//Draw label
imagefilledrectangle($img, 5, $ly, 5+$fw, $ly+$fh, $clrLst[$i]);
imagerectangle($img, 5, $ly, 5+$fw, $ly+$fh , $clrt);
//imagestring($img, $font, 5+2*$fw, $ly, $labLst[$i].":".$datLst[$i]."(". (round(10000*($datLst[$i]/$tot))/100)."%)", $clrt);
$str = iconv("GB2312", "UTF-8", $labLst [$i]);
ImageTTFText($img, $font, 0, 5+2*$fw, $ly+13, $clrt, "./simsun.ttf", $str.":".$ datLst[$i]."(".(round(10000*($datLst[$i]/$tot))/100)."%)");
$ly += $fh+2;
}
//Output graphics
header("Content-type: image/png");
//Output the generated image
$imgFileName = "../temp/".time ().".png";
imagepng($img,$imgFileName);
echo '''''''''''''''''''''''' '''''''''''''''''''''''''''''''''''''''
}
$datLst = array(30, 10, 20, 20, 10, 20, 10, 20); //data
$labLst = array("University of Science and Technology of China", "Anhui University of Science and Technology", "Tsinghua University ", "Peking University", "Nanjing University", "Shanghai University", "Hohai University", "Sun Yat-sen University"); //Tag
$clrLst = array(0x99ff00, 0xff6666, 0x0099ff, 0xff99ff, 0xffff99, 0x99ffff, 0xff3333, 0x009999);
//Draw
draw_img($datLst,$labLst,$clrLst);
?>

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/324544.htmlTechArticleRendering: Source code: [code] ? //+---------- -------------+ //| pie3dfun.PHP//Public functions| //+---------------------- --+ define("ANGLE_STEP", 5); //Define the angle step when drawing an elliptical arc...
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