- Variable definition, angle size when drawing an elliptical arc
- Define ("Anglelength", 3);
- /**
- * Draw Pictures
- * @param $title title of 3D chart
- * @param array of data $dataArr displayed
- * @param $labelArr array of label categories for the corresponding data
- * @param $colorArr An array of drawing colors
- * @param the base width of the $a canvas
- * @param the base height of the $b canvas
- * @param $v height of 3D column
- * @param $font Font size
- * @return Draw a successful picture 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 array length
- $w = $a
- $h = $b *2+ $v + ($fh +2) * $n;
- Create Artboards
- $img = Imagecreate ($w, $h);
- Turn RGB to indexed color
- for ($i =0; $i < $n; $i + +)
- $COLORARR [$i] = Drawindexcolor ($img, $COLORARR [$i]);//assigning colors to image $img
- $CLRBK = Imagecolorallocate ($img, 0xFF, 0xFF, 0xff);
- $CLRT = Imagecolorallocate ($img, 0x00, 0x00, 0x00);
- Fill background color
- Imagefill ($img, 0, 0, $CLRBK);
- Sum
- $tot = 0;
- for ($i =0; $i < $n; $i + +)
- $tot + = $DATAARR [$i];
- Starting angle size for each category
- $SD = 0;
- The angle size occupied by each category
- $ed = 0;
- $ly = $b *2+ $v;
- for ($i =0; $i < $n; $i + +) {
- $SD = $ed;
- $ed + = $DATAARR [$i]/$tot *360;
- Draw 3d Slices
- Draw3dsector ($img, $ox, $oy +20, $a, $b, $v, $SD, $ed, $COLORARR [$i]);
- Draw Labels
- 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 a picture title
- Imagettftext ($img, 0, 5, $CLRT, "D:/wamp/www/source/font/simhei.ttf", Iconv ("GB2312", "UTF-8", $title));
- Output graphics
- Header ("Content-type:image/png");
- Output the resulting picture
- $imgFileName = "./". Time (). ". PNG ";
- Imagepng ($img, $imgFileName);
- return $imgFileName;
- }
- /**
- * Draw 3d Slices
- */
- 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);
- assigning colors to Images
- $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 arcs
- */
- function DrawArc ($img, $ox, $oy, $a, $b, $SD, $ed, $CLR) {
- $n = Anglelength >0? Ceil (($ed-$SD)/anglelength):-1;
- $d = $SD;
- List ($x 0, $y 0) = 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, $x 0+ $ox, $y 0+ $oy, $x + $ox, $y + $oy, $CLR);
- $x 0 = $x;
- $y 0 = $y;
- }
- }
- /**
- * Draw Slices
- */
- function Drawsector ($img, $ox, $oy, $a, $b, $SD, $ed, $CLR) {
- $n = anglelength > 0? Ceil (($ed-$SD)/anglelength):-1;
- $d = $SD;
- List ($x 0, $y 0) = getexy ($a, $b, $d);
- Imageline ($img, $x 0+ $ox, $y 0+ $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, $x 0+ $ox, $y 0+ $oy, $x + $ox, $y + $oy, $CLR);
- $x 0 = $x;
- $y 0 = $y;
- }
- Imageline ($img, $x 0+ $ox, $y 0+ $oy, $ox, $oy, $CLR);
- List ($x, $y) = Getexy ($a/2, $b/2, ($d + $sd)/2);
- Imagefill ($img, $x + $ox, $y + $oy, $CLR);
- }
- /**
- * Get shadow Color of corresponding column according to $CLR color
- * @param $img Images
- * @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);
- }
- /**
- * Point coordinates on the ellipse corresponding to the angle $d
- *
- * @param $a horizontal axis
- * @param $b Ordinate
- * @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 colors to images
- */
- function Drawindexcolor ($img, $CLR) {
- $red = ($clr >>16) & 0xFF;
- $green = ($clr >>8) & 0xFF;
- $blue = ($CLR) & 0xFF;
- Return Imagecolorallocate ($img, $red, $green, $blue);
- }
- Test example
- $title = "Distribution of animal species in zoos";
- $DATAARR = Array (20, 10, 20, 20, 10, 20, 30, 10); Array of test data
- $LABELARR = Array ("Elephant", "giraffe", "crocodile", "ostrich", "Tiger", "Lion", "monkey", "zebra");//Label
- $COLORARR = Array (0x99ff00, 0xff6666, 0x0099ff, 0xff99ff, 0xffff99, 0x99ffff, 0xff3333, 0x009999); corresponding color array
- $result = Drawpieimg ($title, $DATAARR, $LABELARR, $COLORARR);
- echo "";
- ?>
Copy CodeCode Description: The Drawpieimg () function contains 8 parameters, $title as the title of the pie chart, $dataArr as an array of data to be displayed, an array of labels for the corresponding data $labelArr, and an array of drawing colors for the corresponding data $colorArr. These 4 parameters are required for different system applications to pass the corresponding parameters. The remaining 4 parameters, which are responsible for setting the size of the pie chart to be generated, use the system default if not set. The program is drawn from 0 degrees according to the size of the bed base group data, and the direction is drawn in clockwise direction to the size of the slice that the corresponding data occupies. Interested friends, hands-on test under the code bar, see how the pie chart effect?! |