als ik dit script run geeft de pagina dat het plaatje niet weergegeven kon worden omdat het script fouten bevat. Ik heb de code gchckd via tidy in HTML kit maar die geeft niets bijzonders.

wat klopt er niet?



<?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);

?>
Haal de content-type header eens weg en roep het script rechtstreeks aan zodat je eventuele foutmeldingen kan zien.
Geen idee, maar je kunt dit debuggen door je header() tijdelijk te verwijderen en het rapporteren + weergeven van fouten aan te zetten (aan het start van je script):
<?php
error_reporting(E_ALL);
ini_set('display_errors', 'stdout');
?>


Succes.
ik heb header("content-type: image/png"); verwijderd en die twee regels error reporting en ini set bovenaan het script geplaatst maar krijg nu een lege bladzij

[size=xsmall]Toevoeging op 11/08/2015 21:43:30:[/size]

maar in de balk niet de <title></title>

[size=xsmall]Toevoeging op 11/08/2015 21:57:35:[/size]

ah, ik heb het 3d effect eruit gehaald en nu krijg ik een waslijst aan fouten. Ik kan weer even verder :-)
Content type moet met 2x hoofdletters: Content-Type
ik heb het veranderd maar het effect blijft hetzelfde
Lex moen op 11/08/2015 21:40:39

... en nu krijg ik een waslijst aan fouten.

Zoals?

hm. Ik kreeg eerst foutmeldingen dat op regel 61 en volgende er een variabele ontbrak en dat was $punten, diewordt gedefinieerd binnen de 3d deel van het script dat ik verwijderd had. Eigenaardig genoeg krijg ik vanochtend met errorregels aan en 3d uit een hoop gibberish:

‰PNG  IHDRGõ—e!&PLTEÿÿÿÿÿÿhዲIDATxœíÜ]júLÀañ^WÐf º€B³…zÝ›fÿKxã׋3ùK<¦‡òü(Tj.ÎÌZhf3I’þHË®ÐÅûÍ©_ö-¾îÚ]"ßW‡Ö¿&¬vW$@Œ_?_eäýšO³ º‚±ÿYe’·¤ùÛüí׌uäžÕ4o§N‚¬ÿœ5'ÝÈeÁ¸ûz¹Ÿf<~{©±x°Cm¯Ÿä€qààô³ë¿&[îҍæì¾D^Üqšìðj¢ƒSþ„¼GÞtDNÕ8d?ÂüȉûSÈöTjäçæÐ2y·æ‹—o‚“¼%-> ‘{VÛ~ÌŽ#ÌŒœµ']Òå>#÷ÓÌ?ÉÃ[I‘ýfÜïÉór§A^ÜqÚìðêxpÒìÉ›ŽÈ©‡ìg—9q YøC[>dáHÈ'‘÷kþòM0b’·¤å÷ò;!rÏêºïÓ_M|9ëN#LŽÜO3=ò¨KŠì7ã~Oþ¿ÜYÎŧ;À¯ºÓ{¯5޽w‘S5ÙÏ.?râ £‚Œ 2*Ȩ £‚Œ 2*Ȩ £‚Œ 2*Ȩ £‚Œ 2*Ȩ £‚Œ 2*Ȩ £‚Œ 2*Ȩ £‚Œ 2*Ȩ £‚Œ 2*Ȩ £‚Œ 2*Ȩ £‚|´E[(rqúçñ˶ɐEãçå7 ÆÍç&²-ÛM.dŘ Y3fB. Æí&²|°s!Œy¥ÍٝYþ„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„|²yS(rþ¾ºk Y4¾¯s! ÆÕû*²)ûŸ¥BVŒ©5c&ä¼`\¯r!Ë;rÀ˜YºÑœÝiåOHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHÈ#×o!·!wßñÈ+ãòÊ8€o@^WÆäxcÙ\_WE¶××U‘Ýxcyc¬"oŒUä3ÆòÖXCÞkȧŒ<åo¹½»®Œ|Å£¯vy}°ëÈ'vÙÜ‹ÈöÞXDvO‹ÏU+gm¡‚qÖgüt{šËXâ‘IEND®B`‚
Dit komt omdat je geen Content-Type image/png gebruikt.
Als ik dat weer inschakel krijg ik een lege pagina, terwijl
error_reporting(E_ALL);
ini_set('display_errors', 'stdout');
bovenaan de pagina staat

totaal:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
<title>Untitled</title>
</head>
<body>


<?php
error_reporting(E_ALL);
ini_set('display_errors', 'stdout');
$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);

?>




</body>
</html>
Een gegenereerd plaatje kan geen HTML bevatten.

Reageren