Because I always seem to be rewriting this, I now post a copy of a script I used to reduce image sizes. It uses Image Magick to scale images to either a half or a quarter of their original size.
#!/usr/bin/perl -- -*-cperl-*- # # For a given image file, reduce the size by 50% or 25% # use strict; use Image::Magick; use Getopt::Std; my $infile = pop @ARGV; unless (-e $infile) { print usage(); exit 1; } my $Opts = {}; getopts('o:24', $Opts); if (-e $Opts->{'o'}) { print("'$Opts->{o}' already exists. Overwrite?[y/N]\n"); my $a = readline(); if ($a !~ /y/i) { print("Halting.\n"); exit; } } # always reduce image my $factor = ($Opts->{'4'} ? 0.25 : 0.5); my $I = Image::Magick->new(); $I->Read($infile); my $height = $I->Get('height'); my $width = $I->Get('width'); my $err = $I->Resize(height => $height * $factor, width => $width * $factor,); if ($Opts->{'o'}) { $I->Write($Opts->{'o'}); } else { # Spew to STDOUT (from the Image::Magick website) my @pixels = $I->GetPixels(map=>'I', height=>$height * $factor, width =>$width * $factor, normalize=>1,); binmode(STDOUT); # for win32 print pack('B*', join('', @pixels)); } sub usage { return qq[$0 - reduce an image size $0 [OPTS] [FILENAME] -o [FILE] Output file name -2 Reduce image dimensions by half -4 Reduce image dimensions by a fourth ]; }