PDA

Orijinalini görmek için tıklayınız : Php Daire Grafiği Yapma | by Srhtbrz


sByRz
04-21-2013, 12:46 PM
Arkadaşlar kodlar benim değil ama baya bir düzenleme yaptım.Beğendiyseniz +Rep Lütfen

Bu sayfayı daire.php olarak kaydediyoruz.
<?php
$show_label = true; // true = başlık göster, false = başlık gösterme.
$show_percent = true; // true = yüzde göster, false = yüzde gösterme.
$show_text = true; // true = yazı göster, false = yazı gösterme.
$show_parts = false; // true = show parts, false = don't show parts.
$label_form = 'square'; // 'square' ya da 'round' yani kare mi yuvarlak mı.
$width = 199;
$background_color = 'FFFFFF'; // grafiğin arkaplan rengi...
$text_color = '000000'; // yazı rengi.
$colors = array('003366', 'CCD6E0', '7F99B2','F7EFC6', 'C6BE8C', 'CC6600','990000','520000','BFBFC1','808080'); // dilimlerin rengi.
$shadow_height = 16; // gölge boyu.
$shadow_dark = true; // true = koyu gölge, false = açık gölge...

// aşağıdakileir değiştirmeyiniz...

$data = $_GET["data"];
$label = $_GET["label"];

$height = $width/2;
$data = explode('*',$data);

if ($label != '') $label = explode('*',$label);

for ($i = 0; $i < count($label); $i++)
{
if ($data[$i]/array_sum($data) < 0.1) $number[$i] = ' '.number_format(($data[$i]/array_sum($data))*100,1,',','.').'%';
else $number[$i] = number_format(($data[$i]/array_sum($data))*100,1,',','.').'%';
if (strlen($label[$i]) > $text_length) $text_length = strlen($label[$i]);
}

if (is_array($label))
{
$antal_label = count($label);
$xtra = (5+15*$antal_label)-($height+ceil($shadow_height));
if ($xtra > 0) $xtra_height = (5+15*$antal_label)-($height+ceil($shadow_height));

$xtra_width = 5;
if ($show_label) $xtra_width += 20;
if ($show_percent) $xtra_width += 45;
if ($show_text) $xtra_width += $text_length*8;
if ($show_parts) $xtra_width += 35;
}

$img = ImageCreateTrueColor($width+$xtra_width, $height+ceil($shadow_height)+$xtra_height);

ImageFill($img, 0, 0, colorHex($img, $background_color));

foreach ($colors as $colorkode)
{
$fill_color[] = colorHex($img, $colorkode);
$shadow_color[] = colorHexshadow($img, $colorkode, $shadow_dark);
}

$label_place = 5;

if (is_array($label))
{
for ($i = 0; $i < count($label); $i++)
{
if ($label_form == 'round' && $show_label)
{
imagefilledellipse($img,$width+11,$label_place+5,1 0,10,colorHex($img, $colors[$i % count($colors)]));
imageellipse($img,$width+11,$label_place+5,10,10,c olorHex($img, $text_color));
}
else if ($label_form == 'square' && $show_label)
{
imagefilledrectangle($img,$width+6,$label_place,$w idth+16,$label_place+10,colorHex($img, $colors[$i % count($colors)]));
imagerectangle($img,$width+6,$label_place,$width+1 6,$label_place+10,colorHex($img, $text_color));
}

if ($show_percent) $label_output = $number[$i].' ';
if ($show_text) $label_output = $label_output.$label[$i].' ';
if ($show_parts) $label_output = $label_output.$data[$i];

imagestring($img,'2',$width+20,$label_place,$label _output,colorHex($img, $text_color));
$label_output = '';

$label_place = $label_place + 15;
}
}
$centerX = round($width/2);
$centerY = round($height/2);
$diameterX = $width-4;
$diameterY = $height-4;

$data_sum = array_sum($data);

$start = 270;

for ($i = 0; $i < count($data); $i++)
{
$value += $data[$i];
$end = ceil(($value/$data_sum)*360) + 270;
$slice[] = array($start, $end, $shadow_color[$value_counter % count($shadow_color)], $fill_color[$value_counter % count($fill_color)]);
$start = $end;
$value_counter++;
}

for ($i=$centerY+$shadow_height; $i>$centerY; $i--)
{
for ($j = 0; $j < count($slice); $j++)
{
if ($slice[$j][0] != $slice[$j][1]) ImageFilledArc($img, $centerX, $i, $diameterX, $diameterY, $slice[$j][0], $slice[$j][1], $slice[$j][2], IMG_ARC_PIE);
}
}

for ($j = 0; $j < count($slice); $j++)
{
if ($slice[$j][0] != $slice[$j][1]) ImageFilledArc($img, $centerX, $centerY, $diameterX, $diameterY, $slice[$j][0], $slice[$j][1], $slice[$j][3], IMG_ARC_PIE);
}

OutputImage($img);
ImageDestroy($img);


function colorHex($img, $HexColorString)
{
$R = hexdec(substr($HexColorString, 0, 2));
$G = hexdec(substr($HexColorString, 2, 2));
$B = hexdec(substr($HexColorString, 4, 2));
return ImageColorAllocate($img, $R, $G, $B);
}

function colorHexshadow($img, $HexColorString, $mork)
{
$R = hexdec(substr($HexColorString, 0, 2));
$G = hexdec(substr($HexColorString, 2, 2));
$B = hexdec(substr($HexColorString, 4, 2));

if ($mork)
{
($R > 99) ? $R -= 100 : $R = 0;
($G > 99) ? $G -= 100 : $G = 0;
($B > 99) ? $B -= 100 : $B = 0;
}
else
{
($R < 220) ? $R += 35 : $R = 255;
($G < 220) ? $G += 35 : $G = 255;
($B < 220) ? $B += 35 : $B = 255;
}

return ImageColorAllocate($img, $R, $G, $B);
}

function OutputImage($img)
{
header('Content-type: image/png');
ImageJPEG($img,NULL,100);
}

?>

Bu sayfayı da dairegoster.php olarak kaydediyoruz.(isterseniz index fln da kaydedebilirsiniz.Daire grafiğimize bu sayfadan bakacağız.)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "[Linkleri Sadece Kayıtlı Üyeler Görebilir!]">
<html xmlns="[Linkleri Sadece Kayıtlı Üyeler Görebilir!]">
<head>
<meta [Linkleri Sadece Kayıtlı Üyeler Görebilir!]"Content-Type" content="text/html; charset=utf-8" />
<title>Yüzdelik Oranlar</title>
</head>
<img src="./daire.php?data=
1*
1*
1*
1*
1&label=
<?Php echo "Ilk Dilim";?>*
<?Php echo "2.Dilim";?>*
<?Php echo "3.Dilim";?>*
<?Php echo "4.Dilim";?>*
<?Php echo "5.Dilim";?>"/>

Görüntüsü:
[Linkleri Sadece Kayıtlı Üyeler Görebilir!]

dairegoster.php deki 1*1*1*1*1 Yazıları hangi dilimin kaç oran alağını belirtir. Örneğin hepsini 1 yapıp 5 Dilim eklerseniz Bütün dilimler %20 oranla ayrılır.
Konuya zaman ayırdığınız için teşekkür ederim