Я создал динамическую круговую диаграмму с расширением GD, используя функцию дуги, заполненной изображением. Я передаю этому сценарию через переменные HTTP GET до 11 значений. первое значение, n, представляет собой количество следующих за ним значений. n1,n2,n3 и т. д. — сами данные. Это целые проценты. Цель состоит в том, чтобы сделать диаграмму, которая будет отображать проценты на круговой диаграмме в графической форме.
Когда я запускаю это как:
piechart.php?n=2&n1=20&n2=80
У меня только черный ящик. Любые идеи? Любые вопросы, пожалуйста, задавайте - спасибо!
<?php
// var load
$size=500;
//HTTP GET vars:
//N is the number of sections we have
//n1 is the percentage for part1
//n2 is the percentage for part2, and so on
$num=$_GET["n"];
//want to make a hard limit at 10 different sections
$num=min($num,10);
$percents;
$angles;
$angles[0]=0;
$percents[0]=NULL;
//load percents array. First value is NULL
for ($c=1;$c<=$num;$c++)
{
$percents[$c]=(int)$_GET["n".$c];
$angles[$c]=(int)round((($percents[$c-1]+$percents[$c])/100)*360);
}
$angles[$num]=360;
//create image
$half=round($size/2);
$image = imagecreatetruecolor($size, $size);
// colors
$colorR=array(0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x74, 0x33, 0xFF, 0x33, 0x66);
$colorG=array(0x00, 0x80, 0x00, 0xA5, 0xFF, 0xFF, 0x99, 0x00, 0x33, 0xFF);
$colorB=array(0xFF, 0x00, 0x00, 0x00, 0x00, 0xD4, 0xFF, 0x66, 0x99, 0x33);
// shaded colors
$darkColorR=array(0x00, 0x00, 0x80, 0x80, 0x80, 0x3A, 0x1A, 0x80, 0x1A, 0x33);
$darkColorG=array(0x00, 0x40, 0x00, 0x52, 0x80, 0x80, 0x4C, 0x00, 0x1A, 0x80);
$darkColorB=array(0x80, 0x00, 0x00, 0x00, 0x00, 0x6A, 0x80, 0x33, 0x4C, 0x1A);
$white = imagecolorallocate($image, 0xFF, 0xFF, 0xFF);
$black = imagecolorallocate($image, 0x00, 0x00, 0x00);
// make the 3D effect
$tempDarkColor;
for ($i = $half+round(.1*$half); $i > $half; $i--)
{
for ($j=0;$j<(count($angles)-1)&&$angles[$j]<180;$j++)
{
if ($darkColorR[$j]==NULL||$darkColorG[$j]==NULL||$darkColorB[$j]==NULL)
{
//if one of the colors is missing, set the entire color to white
$darkColorR[$j]=0x00;
$darkColorG[$j]=0x00;
$darkColorB[$j]=0x00;
}
$tempDarkColor[$j]= imagecolorallocate($image, $darkColorR[$j],$darkColorG[$j],$darkColorB[$j]);
imagefilledarc($image, $half, $i, $size, $half, $angles[$j], $angles[$j+1] , $tempDarkColor[$j], IMG_ARC_PIE);
}
}
//make the image
$imageColor;
for ($k=0;$k<(count($angles)-1);$k++)
{
if ($darkColorR[$k]==NULL||$darkColorG[$k]==NULL||$darkColorB[$k]==NULL)
{
//if one of the colors is missing, set the entire color to white
$colorR[$k]=0x00;
$colorG[$k]=0x00;
$colorB[$k]=0x00;
}
$tempColor[$k]= imagecolorallocate($image, $darkColorR[$k],$darkColorG[$k],$darkColorB[$k]);
imagefilledarc($image, $half, $half, $size, $half, $angles[$k], $angles[$k+1] , $tempColor[$k], IMG_ARC_PIE);
}
// flush image
header('Content-type: image/png');
imagepng($image);
imagedestroy($image);
?>