Os dejo un script Perl para los Linuxeros de pro aunque debería funcionar también bajo Windows y Mac si tienes Perl y los módulos necesarios instalados.
Redimensiona por lotes una tanda de ficheros jpg de un directorio.
El script es para ser ejecutado desde la línea de comando.
	Código:
	#!/usr/bin/perl
#
# Breve proceso que redimensiona imágenes
# Redimensiona una carpeta de JPG a 3000x2000 y los guarda con el mismo nombre agregando .new.jpg al mismo.
# Redimensiona nuevamente el JPG a 900x600 y los guarda con el mismo nombre agregando .icon.jpg al mismo a modo de muestra.
#
# El script es lineal sin funciones adicionales salvo las estrictamente necesarias.
#
# Requerimientos:
#    Perl 5.10 o posterior
#    Módulo Time::HiRes
#    Módulo Image::Magick
#    ImageMagick 6.5 o posterior
#
# 20150217 por NerveNet
#
use strict;
use Cwd;
use Time::HiRes qw(gettimeofday);
use Image::Magick;
# Variables
my $image = Image::Magick->new;
my $path=getcwd;    # Obtengo el directorio de trabajo
my $k = 0;        # Un contador
my @files;        # Contendrá la lista de ficheros a comprobar
my $tinit = gettimeofday;
# Constantes
my $newwidth = 3000;
my $newheight = 2000;
my $newsmallwidth = 900;
my $newsmallheight = 600;
my $newquality = 95;
# Obtengo los ficheros a comprobar y los ordeno
opendir(DIR, $path);
@files = grep { /\.[jJ][pP][gG]$/ } readdir (DIR);
closedir(DIR);
if (@files == 0) {
    print "En la ruta '$path' no se han encontrado ficheros jpg que tratar.\n";
    exit(1);
}
@files = sort (@files);
# Proceso cada fichero
foreach (@files) {
    if (-e $_) {
        my $oldpic = $_;
        my $newpic = $_;
        $newpic =~ s/[jJ][pP][gG]$//;
        $newpic = $newpic.'new.jpg';
        my $image = Image::Magick->new;
        $image->Read($oldpic);
        my ($cspace, $cols, $rows, $compr, $quality) = $image->Get('colorspace', 'columns', 'rows', 'compression', 'quality');
        if ($cols > $rows) {
            $image->Resize( 
                width => $newwidth,
                height => $newheight,
                filter => 'Lanczos',
                blur=>0.5
            ) if ($cols > $newwidth);
        } else {
            $image->Resize(
                width => $newheight,
                height => $newwidth,
                filter => 'Lanczos',
                blur=>0.5
            ) if ($rows > $newwidth);
        }
        $image->Set(quality=>$newquality);
        my ($ncspace, $ncols, $nrows, $ncompr, $nquality) = $image->Get('colorspace', 'columns', 'rows', 'compression', 'quality');
        $image->Write($newpic);
        print "$oldpic ($cols x $rows: $cspace - $compr [$quality])-> $newpic ($ncols x $nrows: $ncspace - $ncompr [$nquality])\n";
        #
        $newpic = $oldpic;
        $newpic =~ s/[jJ][pP][gG]$//;
        $newpic = $newpic.'icon.jpg';
        if ($cols > $rows) {
            $image->Resize( 
                width => $newsmallwidth,
                height => $newsmallheight,
                filter => 'Lanczos',
                blur=>0.5
            ) if ($cols > $newsmallwidth);
        } else {
            $image->Resize(
                width => $newsmallheight,
                height => $newsmallwidth,
                filter => 'Lanczos',
                blur=>0.5
            ) if ($rows > $newsmallwidth);
        }
        $image->Set(quality=>$newquality);
        ($ncspace, $ncols, $nrows, $ncompr, $nquality) = $image->Get('colorspace', 'columns', 'rows', 'compression', 'quality');
        $image->Write($newpic);
        print "$oldpic ($cols x $rows: $cspace - $compr [$quality])-> $newpic ($ncols x $nrows: $ncspace - $ncompr [$nquality])\n";
        $k++;
    }
}
$tinit = gettimeofday - $tinit;
print "Se han tratado $k ficheros JPEG en $tinit segundos.\n" if ($k);
exit(0);
 Espero haber picado a alguno y que se anime a publicar sus scripts...
				
			
Marcadores