use strict; use warnings; my @Ll=(800,600); my @Ls=(108,81); sub get_dimensions { my ($N)=@_; my $o = `identify $N`; my ($X,$Y) = $o=~ /\ (\d+)x(\d+)\ /; return ($X,$Y); } sub convert { my ($X,$Y,$N,$M)=@_; #X,Y dimensions to convert to #N-original name of file #M-name of converted/modified file my $cmd = "convert -resize %s %s %s"; $cmd=sprintf $cmd,"$X".'x'."$Y!",$N,$M; `$cmd`; #print $cmd; } sub convert_small_large { my ($N)=@_; my ($name,$ext)=split '\.',$N; my ($Xi,$Yi)=get_dimensions $N; if($Xi>$Yi) { convert @Ll,$N,"$name-l.$ext"; convert @Ls,$N,"$name-s.$ext"; } else { convert reverse @Ll,$N,"$name-l.$ext"; convert reverse @Ls,$N,"$name-s.$ext"; }; } my @files = <*>; print join "\n",@files; for (@files) { print "converting $_ ...\n"; my $namelow=lc $_; next unless $namelow =~ /(gif|bmp|jpg|wmf|jpeg|png)$/; eval { convert_small_large $_; }; }