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.
Espero haber picado a alguno y que se anime a publicar sus scripts...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);




Responder Citando
Marcadores