<?php

$gegevens = array(10, 30, 40);
$kleuren = array('#FF0000', '#00FF00', '#0000FF');
$legenda = array('Type A', 'Type B', 'Type C');
$img_hoogte = 500; # Hoogte van het plaatje
$breedte = 40; # Breedte van de kolom

# Berekend de breedte van het plaatje excl. de legenda breedte
function kolom_hoogte($deel, $max, $img_hoogte, $breedte){
	return ($deel/$max)*($img_hoogte-(0.5*$breedte));
}

# Voor het 3d effect (half cosinus 30)
function schuin_x($breedte){
	return $breedte*0.43;
}

# Voor het 3d effect (half sinus 30)
function schuin_y($breedte){
	return $breedte*0.25;
}

# Zet de HTML kleur om in een rbg waarde.
function hex2rbg($color, $image){
	$string = str_replace('#','',$color);
	return	imagecolorallocate($image, hexdec(substr($string,0,2)), hexdec(substr($string,2,2)), hexdec(substr($string,4,2)));
}

# Berekend het maximum aantal tekens per array waarde en geeft de lengte van de langste terug.
function maxarraylength($input){
	foreach($input as $v){
		$output[] = strlen($v);
	}
	return max($output);
}

header("content-type: image/png");

# grootte van het plaatje basseren op het aantal kolomen:
$kolomen = count($gegevens);
$width = ($kolomen*$breedte*2)+(0.5*$breedte);
$image = imagecreate($width+(maxarraylength($legenda)*7)+25, ($img_hoogte+1));

# Achtergrond:
$bg = imagecolorallocate($image, 255, 255, 255);

# KOLUMS
for($i=0;$i<$kolomen;$i++){
	# vars:
	$begin = ($i*$breedte)+($i*$breedte)+(0.5*$breedte);
	$hoogte = kolom_hoogte($gegevens[$i], max($gegevens), $img_hoogte, $breedte);
	$kleur = hex2rbg($kleuren[$i], $image);
	$black = imagecolorallocate($image, 0, 0, 0);
	
	# kolom:
	imagefilledrectangle($image, $begin, ($img_hoogte-$hoogte), ($begin+$breedte), $img_hoogte, $kleur); # Vlak
	imagerectangle($image, $begin, ($img_hoogte-$hoogte), ($begin+$breedte), $img_hoogte, $black); # Omlijning
	
	# 3d effect:
	$punten = array(
		$begin,#X
		($img_hoogte-$hoogte),#Y
	  
		($begin+schuin_x($breedte)),#X
		($img_hoogte-$hoogte-schuin_y($breedte)),#Y
	  
		($begin+$breedte+schuin_x($breedte)),#X
		($img_hoogte-$hoogte-schuin_y($breedte)),#Y
	  
		($begin+$breedte+schuin_x($breedte)),#X
		($img_hoogte-schuin_y($breedte)),#Y
	  
		($begin+$breedte),#X
		$img_hoogte,#Y
	  
		($begin+$breedte),#X
		($img_hoogte-$hoogte)#Y
	);
	imagefilledpolygon($image, $punten, 6, $kleur); # Vlak
	imagepolygon($image, $punten, 6, $black); # Omlijning
	imageline($image, $punten[10], $punten[11], $punten[4], $punten[5], $black); # Tussen lijn
	
	# Legenda:
	$top = (15*$i)+(15*$i)+(0.5*$breedte);
	$left = ($kolomen*$breedte)+($kolomen*$breedte)+(0.5*$breedte);
	imagefilledrectangle($image, $left, $top*0.5, $left+15, $top*0.5+10, $kleur); # Vlak
	imagerectangle($image, $left, $top*0.5, $left+15, $top*0.5+10, $black); # Omlijning
	imagestring($image, 3, $left+20, $top*0.5, $legenda[$i], $black); # Text
}
# // KOLUMS

imagepng($image);

imagedestroy($image);

?>