#!/usr/bin/perl

#--------------------------------------------------------------------
# Fichero:  fondeador.pl
# Objetivo: Preparar imágenes para la web
# Autor:    Pedro Reina <pedro@pedroreina.net>
# Fecha:    X.6.4.2005
# Entradas: Seis parámetros. En el directorio de trabajo deberá
#           haber un conjunto de imágenes *.jpg
#--------------------------------------------------------------------

#---------------------------------
# Declaración de módulos
#---------------------------------

use strict;                 # Comprobaciones estrictas
use Image::Size;            # Para usar imgsize()
use File::Copy;             # Para usar copy()

#---------------------------------
# Declaración de variables
# Estas son internas al programa
#---------------------------------

my $Narg = 0;                # Número de argumentos
my $Numero = 0;              # Número de la foto
my $Anchura = 0;             # Anchura de una imagen
my $Altura = 0;              # Altura de una imagen
my $Nombre = "";             # Nombre del archivo
my $DimensionesPequena = ""; # Dimensiones de imágenes pequeñas
my $DimensionesGrande = "";  # Dimensiones de imágenes grandes

# Estas seis las tomamos de la línea de órdenes
my $AnchuraPequena = 0;
my $AlturaPequena = 0;
my $AnchuraGrande = 0;
my $AlturaGrande = 0;
my $CalidadPequena = 0;
my $CalidadGrande = 0;

#---------------------------------
# Programa principal
#---------------------------------

# Presentación
print "\n";
print "fondeador.pl\n";
print "============\n";

# Si no hay seis argumentos, ayuda al usuario
$Narg = push(@ARGV);
if ( $Narg != 6 )
  { ayuda(); }

else
  {
  # Tomamos los seis parámetros de la línea de órdenes
  $AnchuraPequena = $ARGV[0];
  $AlturaPequena  = $ARGV[1];
  $AnchuraGrande  = $ARGV[2];
  $AlturaGrande   = $ARGV[3];
  $CalidadPequena = $ARGV[4];
  $CalidadGrande  = $ARGV[5];

  # Trabajamos con cada archivo *.jpg:
  #   Lo copiamos como tmp(NombreAnterior)
  #   Creamos una imagen grande con extensión jpg
  #   Creamos una imagen pequeña con extensión jpeg
  print "\nReduciendo imágenes...";
  opendir (LISTAIMAGEN, ".");
  foreach (readdir(LISTAIMAGEN))
    {
    $Nombre = $_;
    if ( $Nombre =~ /\.jpg$/ )
      {
      $Numero++;
      print "\nReduciendo imagen $Numero";
      ($Anchura, $Altura) = imgsize($Nombre);
      copy ($Nombre, "tmp" . $Nombre);
      if ( $Anchura > $Altura )
        {
        $DimensionesPequena = $AnchuraPequena . "x" . $AlturaPequena;
        $DimensionesGrande  = $AnchuraGrande  . "x" . $AlturaGrande;
        }
      else
        {
        $DimensionesPequena = $AlturaPequena . "x" . $AnchuraPequena;
        $DimensionesGrande  = $AlturaGrande  . "x" . $AnchuraGrande;
        }
      system ("mogrify -format jpg  -geometry $DimensionesGrande -quality $CalidadGrande $Nombre");
      system ("mogrify -format jpeg -geometry $DimensionesPequena -quality $CalidadPequena $Nombre");
      }
    }
  closedir (LISTAIMAGEN);
  print "\nImágenes ya reducidas";

  # Borramos los archivos temporales que hemos necesitado
  print "\nBorrando archivos temporales...";
  system ("rm tmp*");
  print "\nArchivos temporados borrados";
  }

# Despedida
print "\nTerminado\n";

#---------------------------------
# Funciones
#---------------------------------

#---------------------------------
# Función:  ayuda()
# Objetivo: Indicacion al usuario
#---------------------------------

sub ayuda
  {
  print "\nEste programa necesita cuatro parámetros:";
  print "\n  La anchura de cada imagen pequeña";
  print "\n  La altura de cada imagen pequeña";
  print "\n  La anchura de cada imagen grande";
  print "\n  La altura de cada imagen grande";
  print "\n  La calidad JPG de las imágenes pequeñas [0..100]";
  print "\n  La calidad JPG de las imágenes grandes [0..100]";
  print "\n  Ejemplo: fondeador.pl 120 90 1024 768 75 100";
  }
