Implementation code for php to generate pie chart effect_PHP tutorial

WBOY
Release: 2016-07-20 11:10:23
Original
833 people have browsed it

Many codes can be used to generate pie charts. The example we introduce today is a pie chart effect that generates statistical data based on the PHP gd library. Students in need can refer to it.

The code is as follows Copy code
//+--------- ----------------+
//| pie3dfun.PHP//Public functions|
//+--------------- ---------+
define("ANGLE_STEP", 5); //Define the angle step when drawing an elliptical arc
function draw_getdarkcolor($img,$clr) //Find $clr Corresponding dark color
{
$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);
}
// Drawing main function and output 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);
?>

The rendering is as follows


www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/444724.htmlTechArticleGenerating a pie chart can be achieved with many codes. The example we introduce today is a generation based on the php gd library Students in need can refer to the pie chart effect of statistical data. Code...
source:php.cn
Statement of this Website
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
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!