FixNEthing has asked for the wisdom of the Perl Monks concerning the following question:

I've written a script that creates a bmp file. I'm testing on windows, and using
open (ImageFile,">$ImageName") or dienice ("Could not open $ImageName +for writing."); binmode (ImageFile);
then have several for loops that
print ImageFile chr($code); close (ImageFile); exit;
which works fine, but on a linux server, How do I send the bmp to the browser ? I assume it's something like
print ("Content-type: image/bitmap\n"); print chr($code);
then how do I close the image ?

Edit kudra, 2001-07-17 Added code tags

Replies are listed 'Best First'.
Re: Yet another counter
by dvergin (Monsignor) on Jul 17, 2001 at 06:03 UTC
    Image MIME types tend to have values like 'image/tiff' and 'image/gif'. My quick explorations suggest that the correct MIME type for a .bmp file is 'image/bmp'. (Natch!)

    You also should have a Content-length: line in your http header. Then print a blank line: 'print "\n";' to end the http header.

    Then do a binmode STDOUT; and spit out the data that makes up the image.

    You close the image by ending the script.

    # assumes image data is in $image my $size = length $image; print "MIME-version: 1.0\n"; print "Content-type: image/bmp\n"; print "Content-length: $size\n"; print "\n"; binmode STDOUT; print $image; # done

    BUT... in my experience, standard browsers do not display .bmp files. Perhaps you were using 'bmp' in a more generic sense to mean 'graphic'. If so, just substitute the appropriate MIME type in the Content-type line.

      Try:
      print ("Content-type: image/x-xbitmap\n\n");
      This should be compatible with most browsers.
Re: Yet another counter
by tachyon (Chancellor) on Jul 17, 2001 at 06:12 UTC

    First you can send a bitmap if you want but as far as I know browsers will only render GIF JPEG and PNG (not all browsers) image formats. To send an image all you need to do is send the appropriate header and then print the content of the image file (binmode on under Win) to STDOUT.

    Here is a short example to send a gif.

    $| = 1; # unbuffer output print "Content-type: image/gif\n\n"; open GIF, "<image.gif" or die "Oops $!\n"; binmode GIF; binmode STDOUT; my $buffer; while(read(GIF,$buffer,4096)) { print $buffer; } close GIF; __END__

    I don't do much with images but there is sure to be a Perl Module to convert to GIF format for you although due to patent problems with the LZW compression in GIFs you usually have to compile support for this format in. GD.pm is a standard image manipulation module. Hope this helps.

    cheers

    tachyon

    s&&rsenoyhcatreve&&&s&n.+t&"$'$`$\"$\&"&ee&&y&srve&&d&&print