#!/usr/bin/perl # Author: Peter R. Wood, http://prwdot.org/ use strict; use Image::Magick; use CGI; my $q = new CGI; LogIt("Starting run."); my $sourcedir = $ARGV[0]; my $indexonly = $ARGV[1]; if ($indexonly) { BuildIndex($sourcedir); } else { my @filelist = GetFileList($sourcedir); DoMagick( $sourcedir, @filelist ); BuildIndex($sourcedir); } sub GetFileList { my ($sourcedir) = @_; LogIt("Getting file list."); my @filelist = (); opendir( SOURCE, "$sourcedir" ); while ( my $filename = readdir(SOURCE) ) { if ( $filename =~ /\w+\.JPG$/oi ) { push( @filelist, $filename ); } } LogIt("Got file list."); return (@filelist); } sub DoMagick { my ( $sourcedir, @filelist ) = @_; LogIt("Doing Magick"); foreach my $filename (@filelist) { my $thumbname = $filename; $thumbname =~ s/\.jpg$//gio; $thumbname = $thumbname . "_thumb.jpg"; my $magick = Image::Magick->new; my $x; $x = $magick->read( filename => "$sourcedir/$filename" ); warn "$x" if "$x"; $x = $magick->Resize( width => '150', height => '113' ); warn "$x" if "$x"; $x = $magick->Set( quality => '50' ); warn "$x" if "$x"; $x = $magick->write( filename => "$sourcedir/$thumbname" ); warn "$x" if "$x"; LogIt("Wrote $sourcedir/$thumbname"); } LogIt("Did Magick."); } sub BuildIndex { my ($sourcedir) = @_; LogIt("Building Index"); my @filelist = GetFileList($sourcedir); my $rows = ""; my $row = ""; my $count = 1; foreach my $filename (@filelist) { if ( $filename =~ /\d+\.JPG$/io ) { my $thumbname = $filename; $thumbname =~ s/\.jpg$//gio; $thumbname = $thumbname . "_thumb.jpg"; $row .= $q->td( $q->a( { -href => $filename }, $q->img( { -src => $thumbname, -width => '150', -height => '113' } ) ) ); if ( ( $count % 4 ) == 0 ) { $rows .= $q->Tr($row) . "\n"; $row = ""; } $count++; } } my $table = $q->table( { -align => "center", -cellpadding => 0, -cellspacing => 5 }, $rows ); my $page = $q->start_html( { -title => "Index Page for $sourcedir" } ) . "\n" . $q->h2( { -align => "center" }, "Index Page for $sourcedir" ) . "\n" . $q->p() . $table . "\n" . $q->end_html(); my $indexfile = "$sourcedir/index.html"; open( INDEX, ">$indexfile" ); print INDEX "$page"; close(INDEX); LogIt("Wrote $indexfile"); LogIt("Built Index"); } sub LogIt { my ($message) = @_; my $datetime = scalar localtime(time); print "[$datetime] $message\n"; }