in reply to Unexpected Image::Info failure

I think you are assuming that because you can see an image included in an html link
print qq(<img src="$img_src">);
that you actually have the file in your filesystem. You don't. To run file info on the file, you need to get it with lwp.

Even when you can see it in your browser, due to your cgi making a link to it, it is buried somewhere in the browser's cache.


I'm not really a human, but I play one on earth. flash japh

Replies are listed 'Best First'.
Re^2: Unexpected Image::Info failure
by shotgunefx (Parson) on Feb 25, 2006 at 18:02 UTC
    Good point. Not familiar with Image::Info. Figured it took urls as a parameter. Guess not.


    -Lee
    "To be civilized is to deny one's nature."
Re^2: Unexpected Image::Info failure
by sulfericacid (Deacon) on Feb 25, 2006 at 16:44 UTC
    Are you saying you can't load the image then?

    I used LWP on $img_src and it prints back lots of ooblygoop. So it looks like it finds the image.



    "Age is nothing more than an inaccurate number bestowed upon us at birth as just another means for others to judge and classify us"

    sulfericacid

      Yes, because LWP makes an HTTP request and retrieves the contents. Perl's open will not open an URL. URLs are not local paths, hence the open and -e fail.

      What is happening is some html magic. The browser will automatically retreive an imageURL if it's in the html tag for the image, and it will end up in the browser's cache. So your cgi program is telling the client's browser to "look at this url" for an image, and the browser does it. So if you open this html file on your local machine, and open it in a browser, you will see the image, but the image is buried deep in the browser's catch.
      <HTML> <BODY> <IMG SRC="http://www.zentara.net/anim_a_s_r.gif" HEIGHT=65 WIDTH=75 a +lt="[zentara]" align=left> </BODY> </HTML>
      So your cgi script does nothing but pass that url to the browser, it does not get the file.

      The gobbldeeGook which you get when you use lwp to retreive the file, is the actual binary data of the image. You need to save it to a scalar( or a temp file) then run your image info routine on it.

      #!/usr/bin/perl use warnings; use strict; use LWP::Simple; use Image::Info qw(image_info dim); my $data = get("http://www.learntogoogle.com/images/addform.jpg"); # this will print binary junk #print "$data\n"; my $info = image_info( \$data ); if (my $error = $info->{error}) { die "Can't parse image info: $error\n"; } my($w, $h) = dim($info); print "$w $h\n";

      I'm not really a human, but I play one on earth. flash japh