user1787184 user1787184 - 1 year ago 86
PHP Question

imagejpeg() function won't output the image

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

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:

<title> Create Buttons </title>
<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" />

PHP code:

Header('Content-type: image/jpeg');
$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";
$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;

$fontname = getenv('GDFONTPATH') . '\comic.ttf';
if(!is_file($fontname)) {
die( "Missing Font");

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

Answer Source

Your problem is the var_dump statement.

That is sending text to your output. The imagejpeg() call is probably creating the image fine, but it will not render with the var_dump statement.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download