Search code examples
perlimagelwp

Why does my image download with Perl's LWP give me the wrong-sized file?


I am trying to get an image from an HTTP server using Perl.

I have the full URL of the file and am attempting to use

my $data = LWP::Simple::get $params{URL};
my $filename = "image.jpg";
open (FH, ">$filename");
print FH $data;
close (FH);

Now, logically, to me at least, this should work. But the files are slightly different sizes, and I can't work out why.

Help!


Solution

  • You need to use binmode to properly write the image data to disk.

    my $data = LWP::Simple::get $params{URL};
    my $filename = "image.jpg";
    open (FH, ">$filename");
    binmode (FH);
    print FH $data;
    close (FH);
    

    Otherwise it is interpreted as text, and the newlines get munged.