EbNCaNa

العالم الآخر

شرح شامل لكيفية توليد رسوم بيانية وثلاثية الابعاد بلغة php

with 2 comments

السلام عليكم اخواني واخواتي :

اليوم جايبلكم معي كود جميل جدا وظيفته توليد صورة رسم بياني ثلاثية الابعاد على شكل دائري وهو يعتمد بالاساس على مكتبة GD بمعنى اذا لما تكون هذه المكتبة منصبة على السيرفر فان الكود لن يعمل وسوف يعطيك خطأ برمجي .

بعد هذا الشرح يوجد روابط لاشهر مكاتب توليد الرسوم البيانية الكاملة بلغة php واكيد عملها رائع واستعمالها سهل جدا .

مثال لصورة من توليد الكود :

php_3d_pie_chart_ebncana

الآن اترككم مع الكود :

PHP Code :

<?

////////////////////////////////////////////////////////////////
// PHP script made by Rasmus – http://www.peters1.dk //
////////////////////////////////////////////////////////////////

$show_label = true; // true = show label, false = don’t show label.
$show_percent = true; // true = show percentage, false = don’t show percentage.
$show_text = true; // true = show text, false = don’t show text.
$show_parts = false; // true = show parts, false = don’t show parts.
$label_form = ’square’; // ’square’ or ’round’ label.
$width = 199;
$background_color = ‘FFFFFF’; // background-color of the chart…
$text_color = ‘000000′; // text-color.
$colors = array(‘003366′, ‘CCD6E0′, ‘7F99B2′,’F7EFC6′, ‘C6BE8C’, ‘CC6600′,’990000′,’520000′,’BFBFC1′,’808080′); // colors of the slices.
$shadow_height = 20; // Height on shadown.
$shadow_dark = true; // true = darker shadow, false = lighter shadow…

// DON’T CHANGE ANYTHING BELOW THIS LINE…

$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,10,10,colorHex($img, $colors[$i % count($colors)]));
imageellipse($img,$width+11,$label_place+5,10,10,colorHex($img, $text_color));
}
else if ($label_form == ’square’ && $show_label)
{
imagefilledrectangle($img,$width+6,$label_place,$width+16,$label_place+10,colorHex($img, $colors[$i % count($colors)]));
imagerectangle($img,$width+6,$label_place,$width+16,$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/jpg’);
ImageJPEG($img,NULL,100);
}
?>

طريقة توليد الصورة :

Html Code :

<img src=”http://www.domain.com/chart.php?data=10*9*11*10&label=Denmark*Germany*USA*Sweden” />

روابط لمكاتب php رائعة تختص بتوليد الرسوم البيانية على انواعها :

- أشهر مكتبة JpGraph وهي JpGraph – Features
- مكتبة صغيره وتؤدي أغلب الاحتياجيات PHPGraphLib Lightweight PHP Graphing Library – Examples
- هنا أيضا مكتبه رائعه pChart | a PHP Charting library

اي سؤال او استفسار الرجاء عدم التردد في طرحه وسأجيب بأقرب وقت ممكن ان شاء الله .

السلام عليكم

2 تعليقات

Subscribe to comments with RSS.

  1. [...] هذا شرح شامل لكيفية توليد رسوم بيانية وثلاثية الابعاد بلغة… __________________ EbNCaNa اخوكم ابن قانا الطريقة الاحترافية [...]

  2. هذه الكود لابأس به ولكن ليس فعال

    somar

    يونيو 30, 2009 في 11:16 ص


اترك رد