Ik heb een script waarmee ik een staafdiagram kan maken. Hij werkt nu, maar het plaatje vult het hele scherm, terwijl ik daar nog tekst onder wil zetten. tekst toevoegen aan het eind van het script werkt niet. tevens mag het plaatje veel kleiner zijn, nu is het plaatje van redelijk formaat, maar daaromheen is alles zwart en, veronderstel ik, deel van het image.

<?php

error_reporting(E_ALL);
ini_set('display_errors', 1);



$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);
echo"een heleboel tekst";
?>
Dat kan niet.
Je geeft een header(PNG)... past een tekst niet in/onder.
en hoe zou ik het aan kunnen passen dat het wel kan?
lijkt me ook.Als ik om te proberen, dit onder het stuk script zet wat ik had en dat het png plaatje maakte zie ik alleen het png plaatje, zonder de 'testing' tekst

// Set the content-type
header('Content-Type: image/png');

// Create the image
$im = imagecreatetruecolor(400, 30);

// Create some colors
$white = imagecolorallocate($im, 255, 255, 255);
$grey = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 399, 29, $white);

// The text to draw
$text = 'Testing...';
// Replace path by your own font path
$font = 'arial.ttf';

// Add some shadow to the text
imagettftext($im, 20, 0, 11, 21, $grey, $font, $text);

// Add the text
imagettftext($im, 20, 0, 10, 20, $black, $font, $text);

// Using imagepng() results in clearer text compared with imagejpeg()
imagepng($im);
imagedestroy($im);
?>

Toevoeging op 12/08/2015 13:39:45:

als ik header uitzet geeft hij dit:


Warning: imagettftext(): Could not find/open font in /home/algen23/domains/algenie.eu/public_html/testorigineel.php on line 120

Warning: imagettftext(): Could not find/open font in /home/algen23/domains/algenie.eu/public_html/testorigineel.php on line 123
‰PNG  IHDR߇€IDATxœíÔA À0À¿çÃ?²¤U°×öÌ,€‚ó;à•a†daX@†a†daX@†a†daX@†a†daX@†a†daX@†a†daX@†a†daX@Ʋi9éÎNÓIEND®B`‚
Lijkt mij duidelijk: Could not find/open font
ja, maar waarom kan hij zoiets algemeens gebruikt als arial niet vinden? Ik hoef me eigenlijk nooit drukte maken om fonts als arial times new roman enzo,dat is altijd 'vindbaar'
fontfile

The path to the TrueType font you wish to use.

Depending on which version of the GD library PHP is using, when fontfile does not begin with a leading / then .ttf will be appended to the filename and the library will attempt to search for that filename along a library-defined font path.

When using versions of the GD library lower than 2.0.18, a space character, rather than a semicolon, was used as the 'path separator' for different font files. Unintentional use of this feature will result in the warning message: Warning: Could not find/open font. For these affected versions, the only solution is moving the font to a path which does not contain spaces.

In many cases where a font resides in the same directory as the script using it the following trick will alleviate any include problems.
ok, ik heb nu een font geupload naar de server, raar dat dat moet, maar ok. nu zie ik echter alleen de test-tekst "testing... en niet meer de staafdiagrammen

<?php

error_reporting(E_ALL);
ini_set('display_errors', 1);



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

// Set the content-type
header('Content-Type: image/png');

// Create the image
$im = imagecreatetruecolor(400, 30);

// Create some colors
$white = imagecolorallocate($im, 255, 255, 255);
$grey = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 399, 29, $white);

// The text to draw
$text = 'Testing...';
// Replace path by your own font path
$font = 'AliquamREG.ttf';

// Add some shadow to the text
imagettftext($im, 20, 0, 11, 21, $grey, $font, $text);

// Add the text
imagettftext($im, 20, 0, 10, 20, $black, $font, $text);

// Using imagepng() results in clearer text compared with imagejpeg()
imagepng($im);
imagedestroy($im);
?>
2x header()?
2x $im = $imagecreatetruecolor()?

Kijk, daar zit je fout...

Reageren