Today is: 21 January, 2012
Check todays hot topics

Ghetto Image Resizing with GD

Compile a txt file of image urls, download the images, resize them. Pretty simple, pretty ghetto. This is a proof for something much larger I will post a later date. This requires Image::Resize which requires GD.

#!/usr/bin/perl
 
use strict;
use warnings;
 
use Data::Dumper;
use Image::Resize;
use LWP::UserAgent;
use Getopt::Long;
 
my $x;
my $y;
my $url;
my $input;
my $outdir;
 
my $verbose = 1;
 
sub do_options {
        my $var = GetOptions( 'i|input=s' => \$input,
                                'u|url=s' => \$url,
                                'x=s' => \$x,
                                'y=s' => \$y,
                                'o|outdir=s' => \$outdir );
        _Usage("Outdir not specified\n") if (!defined($outdir));
        _Usage("Missing X and Y axis sizes\n") if (!defined($x) || !defined($y));
        _Usage("Missing input file or URL\n") if (!defined($input));
        setup_dir();
        return;
}
 
sub setup_dir {
        if( -d $outdir ) {
                warn "WARN: $outdir already exists!\n";
                if( -d "$outdir/new" ) {
                        warn "WARN: $outdir/new already exists!\n";
                }
                if( -d "$outdir/old" ) {
                        warn "WARN: $outdir/old already exists!\n";
                }
                warn "WARN: Using directories that have already been created\n";
                return;
        } else {
                if(`mkdir -p $outdir/old $outdir/new`) {
                        print "INFO: Setup $outdir\n";
                        return;
                } else {
                        die("DIE: Could not setup old/new directories in $outdir\n");
                }
        }
}
 
sub _Usage {
        my $message = shift;
        print $message;
        print "No help message yet\n";
        exit(1);
}
 
sub main {
        do_options();
        my $ua = LWP::UserAgent->new( agent => 'Mozilla or something' );
        my @urls = setup();
        foreach my $img (@urls) {
                chomp($img);
                my $resp = $ua->get($img);
                if($resp->is_success()) {
                        my $filename;
                        while($img =~ /^(.*)\/(.*)$/g) { $filename = $2; }
                        print $filename if($verbose);
                        open (FIL, ">$outdir/old/$filename") || die("error:[$filename] $!");
                        print FIL $resp->content || warn("error:[$filename] $!");
                        close(FIL);
 
                        my $image = Image::Resize->new("$outdir/old/$filename");
                        my $gd = $image->resize($x, $y);
                        open(NEW, ">$outdir/new/$filename") || die("error:[$filename] $!");
                        print NEW $gd->jpeg();
                        close(NEW);
                }
        }
}
 
sub setup {
        my @urls;
        if($input) {
                open FILE, "<$input" or die "Could not open $input: $!\n";
                @urls = <FILE>;
                close(FILE);
                return @urls;
        } elsif($url) {
                push(@urls, $url);
                return @urls;
        } else { 
                die("No input file or url specified\n");
        }
}
main();
exit(0);