Implementation code for drawing pie charts using PHP_PHP tutorial

WBOY
Release: 2016-07-21 15:08:04
Original
971 people have browsed it

The drawPieImg() function contains 8 parameters. $title is the title of the pie chart; $dataArr is the data array that needs to be displayed; $labelArr is the label classification array of the corresponding data; $colorArr is the drawing color array of the corresponding data. These 4 Parameters are required, just pass the corresponding parameters for different system applications. The next four parameters are responsible for setting the size of the pie chart to be generated. If not set, the system default value will be used. The program starts drawing from 0 degrees according to the size of the array data at the bottom of the bed, and draws the sector size occupied by the corresponding data in a clockwise direction.

Copy code The code is as follows:

//Variable definition, the angle size when drawing an elliptical arc
define("ANGLELENGTH",3);
/**
* Draw the picture
* @param $title The title of the 3D picture
* @param $dataArr The displayed data array
* @param $labelArr The label classification array of the corresponding data
* @param $colorArr The array corresponding to the drawing color
* @param $a The base width of the canvas
* @param $b The base height of the canvas
* @param $v The height of the 3D column
* @param $ font font size
* @return successfully drawn image access path
*/
function drawPieImg($title, $dataArr, $labelArr, $colorArr, $a=250, $b=120, $v=20, $font=10){
$ox = 5+$a;
$oy = 5+$b;
$fw = imagefontwidth($font);
$fh = imagefontheight($font);
$n = count($dataArr);//Calculate the array length
$w = 10+$a*2;
$h = 10+$b*2+$v+($fh+2)*$n;
//Create artboard
$img = imagecreate($w, $h);
//Convert RGB to index color
for($i=0; $i<$n; $i++)
$colorArr[$i] = drawIndexColor ($img,$colorArr[$i]);//Assign color to image $img
$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 += $dataArr[$i];
//The starting angle size of each category
$sd = 0;
//The angle occupied by each category
$ed = 0;
$ly = 10+$b*2+$v;
for($i=0; $i<$ n; $i++){
$sd = $ed;
$ed += $dataArr[$i]/$tot*360;
//Draw 3D sector
draw3DSector($img, $ox, $oy+20, $a, $b, $v, $sd, $ed, $colorArr[$i]);
//Draw label
imagefilledrectangle($img, 5, $ly , 5+$fw, $ly+$fh, $colorArr[$i]);
imagerectangle($img, 5, $ly, 5+$fw, $ly+$fh, $clrt);
/ /Chinese transcoding
$str = iconv("GB2312", "UTF-8", $labelArr[$i]);
imagettftext($img, $font, 0, 5+2*$fw, $ly+13, $clrt, "D:/wamp/www/source/font/simhei.ttf", $str.":".$dataArr[$i]."(".(round(10000*($ dataArr[$i]/$tot))/100)."%)");
$ly += $fh+2;
}
//Draw image title
imagettftext($ img, 15, 0, 5, 15, $clrt, "D:/wamp/www/source/font/simhei.ttf", iconv("GB2312", "UTF-8",$title));
//Output graphics
header("Content-type: image/png");
//Output the generated image
$imgFileName = "./".time().".png";
imagepng($img,$imgFileName);
return $imgFileName;
}
/**
* Draw 3D sector
*/
function draw3DSector($img, $ox, $oy, $a , $b, $v, $sd, $ed, $clr) {
drawSector($img, $ox, $oy, $a, $b, $sd, $ed, $clr);
if($sd<180){
list($red, $green, $blue) = drawDarkColor($img, $clr);
//Assign a color to the image
$clr=imagecolorallocate($ img, $red, $green, $blue);
if($ed>180)
$ed = 180;
list($sx, $sy) = getExy($a,$b, $sd);
$sx += $ox;
$sy += $oy;
list($ex, $ey) = getExy($a, $b, $ed);
$ex += $ox;
$ey += $oy;
imageline($img, $sx, $sy, $sx, $sy+$v, $clr);
imageline($ img, $ex, $ey, $ex, $ey+$v, $clr);
drawArc($img, $ox, $oy+$v, $a, $b, $sd, $ed, $clr );
list($sx, $sy) = getExy($a, $b, ($sd+$ed)/2);
$sy += $oy+$v/2;
$ sx += $ox;
imagefill($img, $sx, $sy, $clr);
}
}
/**
* Draw elliptical arc
*/
function drawArc($ img,$ox,$oy,$a,$b,$sd,$ed,$clr){
$n = ANGLELENGTH >0 ? ceil(($ed-$sd)/ANGLELENGTH) : -1 ;
$d = $sd;
list($x0,$y0) = getExy($a,$b,$d);
for($i=0; $i<$n; $i++){
$d = ($d+ANGLELENGTH)>$ed?$ed:($d+ANGLELENGTH);
list($x, $y) = getExy($a, $b , $d);
imageline($img, $x0+$ox, $y0+$oy, $x+$ox, $y+$oy, $clr);
$x0 = $x;
$ y0 = $y;
}
}
 /**
* Draw the sector
*/
 function drawSector($img, $ox, $oy, $a, $b, $sd, $ed, $clr) {
  $n = ANGLELENGTH > 0 ? ceil(($ed-$sd)/ANGLELENGTH) : -1;
  $d = $sd;
  list($x0,$y0) = getExy($a, $b, $d);
  imageline($img, $x0+$ox, $y0+$oy, $ox, $oy, $clr);
  for($i=0; $i<$n; $i++) {
   $d = ($d+ANGLELENGTH)>$ed?$ed:($d+ANGLELENGTH);
   list($x, $y) = 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) = getExy($a/2, $b/2, ($d+$sd)/2);
  imagefill($img, $x+$ox, $y+$oy, $clr);
 }
 /**
* Get the shadow color of the corresponding column based on $clr color
* @param $img Image
* @param $clr Color
* @return rgb color array
*/
 function drawDarkColor($img,$clr){
  $rgb = imagecolorsforindex($img,$clr);
  return array($rgb["red"]/2,$rgb["green"]/2,$rgb["blue"]/2);
 }
 /**
* Find the coordinates of the point on the ellipse corresponding to angle $d
*
* @param $a Abscissa
* @param $b Vertical coordinate
* @param $d Angle
* @return Corresponding ellipse point coordinates
*/
 function getExy($a, $b, $d){
  $d = deg2rad($d);
  return array(round($a*cos($d)), round($b*sin($d)));
 }
 /**
* Assign RGB index color to image
*/
 function drawIndexColor($img, $clr){
  $red = ($clr>>16) & 0xff;
  $green = ($clr>>8)& 0xff;
  $blue = ($clr) & 0xff;
  return imagecolorallocate($img, $red, $green, $blue);
 }
//测试示例
$title = "动物园动物种类分布情况";
$dataArr = array(20, 10, 20, 20, 10, 20, 30, 10); //测试数据数组
$labelArr = array("大象", "长颈鹿", "鳄鱼", "鸵鸟", "老虎", "狮子", "猴子", "斑马");//标签
$colorArr = array(0x99ff00, 0xff6666, 0x0099ff, 0xff99ff, 0xffff99, 0x99ffff, 0xff3333, 0x009999); //对应颜色数组
$result = drawPieImg($title, $dataArr,$labelArr,$colorArr);
echo "";
?>

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/327499.htmlTechArticledrawPieImg()函数包含8个参数,$title为饼状图的标题;$dataArr为需要显示的数据数组;$labelArr为对应数据的标签分类数组;$colorArr为对应数据的...
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!