Script til 3D Cirkeldiagram med PHP

Cirkeldiagram 
 

Her kan scriptet afprøves for variationer:

Andele:
Tekst:
  (Andele adskilt af stjerne: *) Forklaring
Vis:
Etikettens form:
Bredde: pixels
Baggrundsfarve:  Vælg baggrundsfarve...
Tekst-farve:  Vælg baggrundsfarve...
Skyggens højde: pixels
Skyggens farve:
Betingelser til PHP-installationen:
Dette script kræver at GD 2.0.1 eller bedre er installeret på PHP-serveren. Hjælp
Dette script kræver at JPG Support er sat til (enabled). Hjælp

  Start med at gemme selve PHP-scriptet i en fil. Nedenstående ændringer kan foretages i scriptet:

Du kan vælge om der skal vises etiketter, procenter, tekst, andele...
Du kan vælge formen af etiketterne ('firkantet' eller 'rund')...
Du kan ændre bredden af Cirkelen...
Du kan også ændre baggrunden af diagrammet...
Tekst-farven...
Farverne til de forskellige skiver er gemt i et array, som også frit kan ændres...
Højdenskyggen kan ændres (Pæneste resultat er "$bredde/12")
Hvis true: Skyggen er mørkere, ellers false: Skyggen er lysere

<?php
////////////////////////////////////////////////////////////////
// PHP script made by Rasmus - http://www.peters1.dk //
////////////////////////////////////////////////////////////////

$vis_etiket = true; // true = Viser etiket, false = Viser IKKE etiket.
$vis_procent = true; // true = Viser procenter, false = Viser IKKE procenter.
$vis_tekst = true; // true = Viser tekst, false = Viser IKKE tekst.
$vis_andel = false; // true = Viser andele, false = Viser IKKE andele.
$etiket_form = 'firkantet'; // 'firkantet' eller 'rund' etiket.
$bredde = 199;
$baggrund_farve = 'FFFFFF'; // Farven på baggrunden til diagrammet...
$tekst_farve = '000000'; // Farven på teksten.
$farver = array('003366', 'CCD6E0', '7F99B2','F7EFC6', 'C6BE8C', 'CC6600','990000','520000','BFBFC1','808080'); // Farver til elementerne i diagrammet
$skygge_hojde = 16; // Højden på skyggen. Det pæneste resultat er $bredde/12...
$skygge_mork = true; // true = Mørkere skygge, false = Lysere skygge...

// HERUNDER SKAL DER IKKE ÆNDRES NOGET...

$hojde = $bredde/2;
$data = explode('*',$data);

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

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

if (is_array($etiket))
{
	$antal_etiket = count($etiket);
	$xtra = (5+15*$antal_etiket)-($hojde+ceil($skygge_hojde));
	if ($xtra > 0) $xtra_hojde = (5+15*$antal_etiket)-($hojde+ceil($skygge_hojde));
	
	$xtra_bredde = 5;
	if ($vis_etiket) $xtra_bredde += 20;
	if ($vis_procent) $xtra_bredde += 45;
	if ($vis_tekst) $xtra_bredde += $text_langde*8;
	if ($vis_andel) $xtra_bredde += 35;
}

$img = ImageCreateTrueColor($bredde+$xtra_bredde, $hojde+ceil($skygge_hojde)+$xtra_hojde);

ImageFill($img, 0, 0, FarveHex($img, $baggrund_farve));

foreach ($farver as $farvekode) 
{
	$fyld_farve[] = FarveHex($img, $farvekode);
	$skygge_farve[] = FarveHexSkygge($img, $farvekode, $skygge_mork);
}

$etiket_placering = 5;

if (is_array($etiket))
{
	for ($i = 0; $i < count($etiket); $i++) 
	{
		if ($etiket_form == 'rund' && $vis_etiket && $data[$i] > 0)
		{
			imagefilledellipse($img,$bredde+11,$etiket_placering+5,10,10,FarveHex($img, $farver[$i % count($farver)]));
			imageellipse($img,$bredde+11,$etiket_placering+5,10,10,FarveHex($img, $tekst_farve));
		}
		else if ($etiket_form == 'firkantet' && $vis_etiket && $data[$i] > 0)
		{	
			imagefilledrectangle($img,$bredde+6,$etiket_placering,$bredde+16,$etiket_placering+10,FarveHex($img, $farver[$i % count($farver)]));
			imagerectangle($img,$bredde+6,$etiket_placering,$bredde+16,$etiket_placering+10,FarveHex($img, $tekst_farve));
		}

		if ($data[$i] > 0)
		{
			if ($vis_procent) $etiket_output = $nummer[$i].' ';
			if ($vis_tekst) $etiket_output = $etiket_output.$etiket[$i].' ';
			if ($vis_andel) $etiket_output = $etiket_output.$data[$i];
		
			imagestring($img,'2',$bredde+20,$etiket_placering,$etiket_output,FarveHex($img, $tekst_farve));
			$etiket_output = '';
		
			$etiket_placering = $etiket_placering + 15;
		}
	}
}
$centrumX = round($bredde/2);
$centrumY = round($hojde/2);
$diameterX = $bredde-4;
$diameterY = $hojde-4;

$data_sum = array_sum($data);

$start = 270;

for ($i = 0; $i < count($data); $i++) 
{
	$vardi += $data[$i];
	$slut = ceil(($vardi/$data_sum)*360) + 270;
	$skive[] = array($start, $slut, $skygge_farve[$vardi_taller % count($skygge_farve)], $fyld_farve[$vardi_taller % count($fyld_farve)]);
	$start = $slut;
	$vardi_taller++;
}

for ($i=$centrumY+$skygge_hojde; $i>$centrumY; $i--) 
{
	for ($j = 0; $j < count($skive); $j++)
	{
		if ($skive[$j][0] != $skive[$j][1]) ImageFilledArc($img, $centrumX, $i, $diameterX, $diameterY, $skive[$j][0], $skive[$j][1], $skive[$j][2], IMG_ARC_PIE);
	}
}	

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

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


function FarveHex($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 FarveHexSkygge($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);
}

?>

 Nu kan du vise diagrammet, ved at hente scriptet som et almindelig billede, med andele og etiketter som attributter:

<img src="http://www.domain.dk/piechart.php?data=10*9*11*10&etiket=Danmark*Tyskland*USA*Sverige" />

 

Kunne du bruge scriptet? Donér venligst lidt småskillinger...



...til fortsat at kunne forbedre hjemmesiden :-)
Script til 3D Cirkeldiagram med PHP

Script to 3D pie chart with PHP

Script zum 3D Kreis-diagramm mit PHP


This page in english Script to 3D pie chart with PHP
Diese Seite auf Deutsch Script zum 3D Kreis-diagramm mit PHP  
 
Forsiden Se/skriv i min gæstebog Sitemap Send mail  Bookmark and Share
Valid XHTML 1.0!