http://www.perlmonks.org?node_id=572287


in reply to Re^3: CGI-Perl:: Location for saving the GD output
in thread CGI-Perl:: Location for saving the GD output

hi Shmem,

I tried as following...

#!/usr/bin/perl -w use CGI; my $query = new CGI; $query->header(); $query->start_html(); print "Content-type:image/x-png\n\n"; open (I, '<', "/tmp/upload/EMBOSS_001.png"); binmode I; print while <I>; close I; $query->endform(); $query->end_html();
But it prints only some arbitory characters, not an image!!

Replies are listed 'Best First'.
Re^5: CGI-Perl:: Location for saving the GD output
by shmem (Chancellor) on Sep 11, 2006 at 07:53 UTC

    What about binmode STDOUT? Further observations:

    • if you serve an image, you don't serve html.
    • you invoke the header method and throw away the result
    • you invoke the start_html method and throw away the result
    • if you assemble the header yourself (which you should not do) end it with "\r\n\r\n"
    • you invoke the endform method and throw away the result
    • you invoke the end_html method and throw away the result

    Try this:

    #!/usr/bin/perl -w use CGI; my $query = new CGI; binmode STDOUT; print $query->header(-content_type => 'image/x-png'); open (I, '<', "/tmp/upload/EMBOSS_001.png"); binmode I; print while <I>; close I;

    Does that work?

    --shmem

    _($_=" "x(1<<5)."?\n".q·/)Oo.  G°\        /
                                  /\_¯/(q    /
    ----------------------------  \__(m.====·.(_("always off the crowd"))."·
    ");sub _{s./.($e="'Itrs `mnsgdq Gdbj O`qkdq")=~y/"-y/#-z/;$e.e && print}
      Ya Shmem,

      it is working finally..Thanks a lot :-) ; but if you remember I asked the question that I was not able to get (B). Where (B) was actually this png image and (A) was text output.

      And with (A) and (B) together I am still getting Greek and Latin only.

      Is it a problem of header, because to get both text as well as image.. which header should I use.. I tried every combination of

      print "Content-type:text/html\r\n\r\n"; print "Content-type:image/x-png\r\n\r\n; but its printing the same arbitory symbols.. Or both the things can not be worked simultaneously??

        Obviously sending two Content-Type in a single response is not going to work. If you want to return an HTML document that includes your generated images then you need to send that separately and reference the images in the HTML - see for instance my earlier response.

        /J\