Script til 3D Cirkeldiagram med PHP
Her kan scriptet afprøves for variationer:
Betingelser til PHP-installationen: Dette script kræver at
GD 2.0.1 eller bedre er installeret på PHP-serveren.
Dette script kræver at
JPG Support er sat til (enabled).
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øjden på skyggen 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 :-)