Page 1 of 1

imagepng behaviour

Posted: Sat Dec 19, 2009 6:05 am
by Bob Kellock
I've been struggling with overlaying a graphic template with some text and saving the result as a file which, later, will used as an attachment to an email. After creating the overlaid file I need to redirect to another page.
While developing the code I was displaying the template graphic (Line 18 of the code) in which case the redirection failed. But by, commenting out that line, redirection worked.

Can you explain that behaviour?

Bob

Code: Select all

<?php session_start();
   header('Content-Type: image/png');
   $serial  = "ABC123X";                    // normally passed as a session variable
   $imgname = 'blankorder.png';
   $img = @imagecreatefrompng($imgname);    // open image file
   if(!$img)                                // failed to open
   {
      $img = imagecreatetruecolor(300, 30);
      $bak = imagecolorallocate($img, 255, 255, 255);
      $txt = imagecolorallocate($img, 255, 0, 0);
      imagefilledrectangle($img, 0, 0, 300, 30, $bak);
      imagestring($img, 5, 0, 0, 'Error loading ' . $imgname, $txt); //error message
      imagepng($img);
      die();
    }
    else
    {
//  imagepng($img);  // Puts blank form on screen but, if implemented, the redirection doesn't work
    $textcolour = imagecolorallocate($img, 0, 0, 0);
//  Font converted from ttf using http://www.wedwick.com/wftopf.exe
    $font = imageloadfont('Arial24.gdf');
    imagestring($img, $font, 535, 312, $serial, $textcolour);   // insert serial no. in required position
    imagepng($img,'overlaid.png');                              // save overlaid image as a file
    imagedestroy($img);
//  header('Content-Type: text/html; charset=iso-8859-1');      // appears to be redundant
    header('refresh: 0; url=stamped.html');                     // redirect to specified page
   }
?>
 

Re: imagepng behaviour

Posted: Mon Jun 28, 2010 3:28 pm
by greyhoundcode
In a nutshell, don't send anything before your headers.

When you uncomment the relevant line you are sending the PNG image first, headers second - that won't work. If you need to display the form before redirecting then it would be better to implement the redirect with JS.