use strict; use Image::Magick; my @DIRS = (); my $RESIZE_X = 480; my $RESIZE_Y = 854; foreach my $dir(@DIRS) { my ($SEC, $MIN, $HOUR, $DAY, $MONTH, $YEAR) = localtime(); $YEAR += 1900; $MONTH++; my $DIR_TIME_NAME = sprintf("%04d%02d%02d_%02d%02d%02d", $YEAR, $MONTH, $DAY, $HOUR, $MIN, $SEC); my @files = (); opendir(CURRENT, "$dir"); while (defined(my $file = readdir(CURRENT))) { if ($file =~ /(.*)\.jpg/i) { push(@files, "$dir/$file"); } } closedir(CURRENT); mkdir("$dir/$DIR_TIME_NAME"); foreach my $jpg(@files) { my $image = Image::Magick->new; if ($jpg =~ /(.*)\.jpg/i) { $image->Read($jpg); my ($x, $y) = $image->Get('width', 'height'); my $magni_x = $RESIZE_X / $x; my $magni_y = $RESIZE_Y / $y; if ($magni_x >= 1 && $magni_y >= 1) { next; } my $magnification; if ($magni_x > $magni_y) { $magnification = $magni_y; } else { $magnification = $magni_x; } $image->Resize(width => $x * $magnification, height => $y * $magnification); binmode(STDOUT); my @temp = split(/\//, $jpg); $image->Write("$dir/$DIR_TIME_NAME/" . $temp[1]); } undef $image; } }