Ok, so I'm learning how to use the GD library of PHP to generate polls, images, etc.. The thing is that when it comes to the image output using the imagejpeg
function, nothing shows on the screen. For this exercise, I am typing text on a HTML forum, which needs to be put on an image using the GD library, basically putting text on an image. It's pretty straight-forward, I just don't understand why my image won't show. Below is both the HTML form code and the PHP code.
HTML form:
<html>
<head>
<title> Create Buttons </title>
</head>
<body>
<form action ="button.php" method ="post">
<p> Type button text here </p>
<input type="text" name="button_text" size ="20" />
<p> Choose button color: </p>
<input type ="radio" name="color" value="red"> Red <br>
<input type ="radio" name="color" value="green"> Green <br>
<input type ="radio" name="color" value="blue"> Blue <br>
<input type ="submit" value ="Create Button" />
</form>
</body>
</html>
PHP code:
<?php
Header('Content-type: image/jpeg');
$DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT'];
$button_text = $_POST['button_text']; var_dump($button_text);
$color = $_POST['color']; var_dump($color);
if(empty($color) || empty($button_text)) {
echo " Could not create image - form not filled correctly";
exit;
}
$path = $DOCUMENT_ROOT."/uploads/$color-button.jpg";
$im = imagecreatefromjpeg ($path);
$width_image = imagesx($im);
$height_image = imagesy($im);
$width_image_wo_margins = $width_image-(2*18);
$height_image_wo_margins = $width_image-(2*18);
$font_size = 33;
putenv('GDFONTPATH=C:\Windows\Fonts');
$fontname = getenv('GDFONTPATH') . '\comic.ttf';
if(!is_file($fontname)) {
die( "Missing Font");
}
do {
$font_size--;
$bbox = imagettfbbox($font_size,0,$fontname,$button_text);
$right_text = $bbox[2];
$left_text = $bbox[0];
$width_text = $right_text -$left_text;
$height_text = abs($bbox[7] - $bbox[1]);
}
while($font_size > 8 && ( $height_text > $height_image_wo_margins || $width_text > $width_image_wo_margins));
if ( $height_text > $height_image_wo_margins || $width_text > $width_image_wo_margins) {
echo "Text given wil not fit on button.<br />";
} else {
$text_y = $width_image/2.0 - $width_text/2.0;
$text_x = $height_image/2.0 - $height_text/2.0;
if($left_text < 0) {
$text_x += abs($left_text); //add factor for left overhang.
}
$above_line_text = abs($bbox[7]);
$text_y += $above_line_text;
$text_y -=2;
$white = imagecolorallocate($im,255,255,255);
imagettftext($im, $font_size, 0, $text_x, $text_y, $white, $fontname, $button_text);
imagejpeg($im, NULL,75);
}
imagedestroy($im);
?>