Fotografías de Zoraima y Marcelo
Fotografías tomadas con nuestras cámaras Olympus

Posts Tagged ‘ruby’

Script en ruby como gui para el comando 3Dtext.

Lun ,01/03/2010

site.jpg

El comando 3Dtext permite crear un texto extruido simulando un efecto tridimensional. El script está ubicado en esta página y ha sido creado por Fred Weinhaus usando la interfaz de cónsola ImageMagick. Pueden bajar el script y ver los ejemplos de la página web indicada. El comando usa 13 parámetros para crear un texto, para ello hemos creado esta interfaz gráfica que nos facilita un poco el uso del comando.

Quedaría pendiente grabar los parámetros usados en un archivo tipo ini, para ser leído en la siguiente ejecución del programa, lo cual facilitaría aún más la múltiple creación de textos. El archivo de salida ha sido fijado con el nombre de 3Dtextoruby.png

#!/usr/bin/ruby 

require 'tk'
require 'RMagick'
include Magick

#-----------------------------------------------------
# mac3d.rb
#    Interfaz GUI para uso de 3Dtext
# autor: Marcelo Anelli C.
#
# v1.00 23/02/2010 programa base.
#-----------------------------------------------------

# Selección de las opciones del borde
def opciones(padre)
  # definir ventana de diálogo de las opciones
  wopciones = TkToplevel.new {
    title 'Seleccione sus opciones:'
    #relief 'sunken'
    borderwidth 3
    height 430
    width 600
  }
  # etiquetas
  etiq0l = TkLabel.new(wopciones) {
    text 'Texto:'
    place('x'=>10.0,'y'=>10.0)
  }
  etiq02 = TkLabel.new(wopciones) {
    text 'Fuente:'
    place('x'=>10.0,'y'=>40.0)
  }
  etiq03 = TkLabel.new(wopciones) {
    text 'Tamaño Fuente:'
    place('x'=>10.0,'y'=>70.0)
  }
  etiq04 = TkLabel.new(wopciones) {
    text 'Tamaño itálico:'
    place('x'=>10.0,'y'=>100.0)
  }
  etiq05 = TkLabel.new(wopciones) {
    text 'Color texto:'
    place('x'=>10.0,'y'=>130.0)
  }
  etiq06 = TkLabel.new(wopciones) {
    text 'Color fondo:'
    place('x'=>10.0,'y'=>160.0)
  }
  etiq07 = TkLabel.new(wopciones) {
    text 'Color borde:'
    place('x'=>10.0,'y'=>190.0)
  }
  etiq08 = TkLabel.new(wopciones) {
    text 'Tamaño borde:'
    place('x'=>10.0,'y'=>220.0)
  }
  etiq09 = TkLabel.new(wopciones) {
    text 'Color outline:'
    place('x'=>10.0,'y'=>250.0)
  }
  etiq10 = TkLabel.new(wopciones) {
    text 'Tamaño outline:'
    place('x'=>10.0,'y'=>280.0)
  }
  etiq11 = TkLabel.new(wopciones) {
    text 'Color extrusión:'
    place('x'=>10.0,'y'=>310.0)
  }
  etiq12 = TkLabel.new(wopciones) {
    text 'Tamaño extrusión:'
    place('x'=>10.0,'y'=>340.0)
  }
  etiq13 = TkLabel.new(wopciones) {
    text 'Dirección:'
    place('x'=>10.0,'y'=>370.0)
  }
  # variables
  entry1  = TkEntry.new(wopciones) { background "white" }
  entry2  = TkEntry.new(wopciones) { background "white" }
  entry3  = TkEntry.new(wopciones) { background "white" }
  entry4  = TkEntry.new(wopciones) { background "white" }
  entry5  = TkEntry.new(wopciones) { background "white" }
  entry6  = TkEntry.new(wopciones) { background "white" }
  entry7  = TkEntry.new(wopciones) { background "white" }
  entry8  = TkEntry.new(wopciones) { background "white" }
  entry9  = TkEntry.new(wopciones) { background "white" }
  entry10 = TkEntry.new(wopciones) { background "white" }
  entry11 = TkEntry.new(wopciones) { background "white" }
  entry12 = TkEntry.new(wopciones) { background "white" }
  entry13 = TkEntry.new(wopciones) { background "white" }
  varia1  = TkVariable.new
  varia2  = TkVariable.new
  varia3  = TkVariable.new
  varia4  = TkVariable.new
  varia5  = TkVariable.new
  varia6  = TkVariable.new
  varia7  = TkVariable.new
  varia8  = TkVariable.new
  varia9  = TkVariable.new
  varia10 = TkVariable.new
  varia11 = TkVariable.new
  varia12 = TkVariable.new
  varia13 = TkVariable.new
  entry1.textvariable  = varia1
  entry2.textvariable  = varia2
  entry3.textvariable  = varia3
  entry4.textvariable  = varia4
  entry5.textvariable  = varia5
  entry6.textvariable  = varia6
  entry7.textvariable  = varia7
  entry8.textvariable  = varia8
  entry9.textvariable  = varia9
  entry10.textvariable = varia10
  entry11.textvariable = varia11
  entry12.textvariable = varia12
  entry13.textvariable = varia13
  varia1.value  = $texto
  varia2.value  = $fuente
  varia3.value  = $punto
  varia4.value  = $italic
  varia5.value  = $tcolor
  varia6.value  = $ucolor
  varia7.value  = $bcolor
  varia8.value  = $bsize
  varia9.value  = $ocolor
  varia10.value = $lsize
  varia11.value = $ecolor
  varia12.value = $amount
  varia13.value = $direct
  entry1.place('height' => 25, 'width' => 450, 'x' => 140, 'y' =>  10)
  entry2.place('height' => 25, 'width' => 450, 'x' => 140, 'y' =>  40)
  entry3.place('height' => 25, 'width' =>  50, 'x' => 140, 'y' =>  70)
  entry4.place('height' => 25, 'width' =>  50, 'x' => 140, 'y' => 100)
  entry5.place('height' => 25, 'width' => 450, 'x' => 140, 'y' => 130)
  entry6.place('height' => 25, 'width' => 450, 'x' => 140, 'y' => 160)
  entry7.place('height' => 25, 'width' => 450, 'x' => 140, 'y' => 190)
  entry8.place('height' => 25, 'width' =>  50, 'x' => 140, 'y' => 220)
  entry9.place('height' => 25, 'width' => 450, 'x' => 140, 'y' => 250)
  entry10.place('height' => 25, 'width' =>  50, 'x' => 140, 'y' => 280)
  entry11.place('height' => 25, 'width' => 450, 'x' => 140, 'y' => 310)
  entry12.place('height' => 25, 'width' =>  50, 'x' => 140, 'y' => 340)
  entry13.place('height' => 25, 'width' => 250, 'x' => 140, 'y' => 370)
  # Botón de ok
  butfin = TkButton.new(wopciones)
  butfin.configure('text' => 'Ok')
  butfin.command {
    $texto  = varia1.value
    $fuente = varia2.value
    $punto  = varia3.value
    $italic = varia4.value
    $tcolor = varia5.value
    $ucolor = varia6.value
    $bcolor = varia7.value
    $bsize  = varia8.value
    $ocolor = varia9.value
    $lsize  = varia10.value
    $ecolor = varia11.value
    $amount = varia12.value
    $direct = varia13.value

    wopciones.destroy
  }
  butfin.place('x'=>460.0,'y'=>400.0)
  # Botón de cancelar
  butcanc = TkButton.new(wopciones)
  butcanc.configure('text'=> 'Cancelar')
  butcanc.command { wopciones.destroy }
  butcanc.place('x'=>510.0,'y'=>400)
end

def procesatexto
  # procesar texto
  exec( "3Dtext", "-t", $texto, "-f", $fuente, "-p", $punto, "-i", $italic,
        "-c", $tcolor, "-u", $ucolor, "-b", $bcolor, "-s", $bsize, "-o", $ocolor,
        "-l", $lsize, "-x", $ecolor, "-a", $amount, "-d", $direct, "3Dtextoruby.png")
end

# Variables
$texto   = "Marcelo Anelli"
$fuente  = "Arial"
$punto   = "48"
$italic  = "0"
$tcolor  = "navy"
$ucolor  = "white"
$bcolor  = "white"
$bsize   = "5"
$ocolor  = "black"
$lsize   = "0"
$ecolor  = "gray"
$amount  = "8"
$direct  = "northwest"

# Abrir ventana
root = TkRoot.new { title "macborde.rb"; minsize(400,100) }
root['resizable'] = false, false
root['geometry'] = '400x150+200+200'

# Botón de control
buttonexec = TkButton.new(root)
buttonexec.configure('text' => 'Ejecutar')
buttonexec.command { procesatexto() }
buttonexec.place('x'=>260.0,'y'=>110.0)
# Botón de opciones
butopciones = TkButton.new(root)
butopciones.configure('text' => 'Opciones')
butopciones.command { opciones(root) }
butopciones.place('x'=>175.0,'y'=>110.0)
# Botón de salida
butcancela = TkButton.new(root)
butcancela.configure('text' => 'Salir')
butcancela.command { exit }
butcancela.place('x'=>335.0,'y'=>110.0)
# Mostrar ventana principal
Tk.mainloop

# salir
exit

Post to Twitter Post to Facebook http://marceloanelli.com/fotomac/?p=786

Script en ruby e Rmagick para cambiar el tamaño de una imágen

Dom ,24/01/2010

site.jpg

Este caso es más sencillo que ponerle un doble borde ya que practicamente es el mismo programa anterior, vea este caso, y sencillamente eliminando unas cuantas líneas de instrucciones se obtendrá el código requerido en esta ocasión. Básicamente el proceso es uno solo y fácilmente pudieramos escribir el código en la misma línea de comandos, pero la ventaja de este programa es que puede procesarnos un directorio de un solo tirón.

Sin embargo la idea de estos scripts es para luego poder crear un programita más formal con el cual podremos cambiar el tamaño, agregar borde, revelar un raw y otras tareas más para procesar un lote de fotografías desde la cámara.

#!/usr/bin/ruby 

require 'tk'
require 'RMagick'
include Magick

#-----------------------------------------------------
# macresize.rb
#    Cambiar de tamaño una imágen
# autor: Marcelo Anelli C.
#
# v1.00 24/01/2010 programa base
#-----------------------------------------------------

# Procesamiento de la imágen
def creaborde(imagen)
  # leer la imágen
  procesamos = 0
  $cuenta1 = $cuenta1 + 1
  if $eldir == ""
    sudir = File::dirname(imagen)
    suima = File::basename(imagen)
    supre = $asalida
  else
    sudir = $eldir
    suima = imagen
    supre = $asalida
  end
  if not File::directory?(sudir+supre)
    Dir::mkdir( sudir+supre )
  end
  if not (File.exist?(sudir+suima) and File.file?(sudir+suima) )
    return
  end
  $eldato.text("#{$cuenta1}: #{sudir+suima}")
  $eldato.pack()
  $eldato.update
  puts "imagen: #{sudir+suima}\n" if Debug == 1
  puts "graba:  #{sudir+supre+suima}\n" if Debug == 1
  begin
    img1 = Magick::Image.read(sudir+suima).first
  rescue
    puts "No es una imágen válida." if Debug == 1
    $eldato.text("no es una imágen")
    $eldato.pack()
    $eldato.update
    return
  end
  puts "imagen: -#{imagen}- " if Debug == 1
  puts " -#{img1.format}- " if Debug == 1
  puts " -#{img1.image_type}-\n" if Debug == 1
  if img1.format == "JPEG" or img1.format == "PNG" or img1.format == "TIFF"
    procesamos = 1
  end
  if procesamos == 0
    $eldato.text("#{img1.format} no soportado")
    $eldato.pack()
    $eldato.update
    puts "No es un formato soportado." if Debug == 1
    return
  end
  $eldato.text("#{img1.format} #{img1.image_type}")
  $eldato.pack()
  $eldato.update
  # escalarla
  img = img1.resize_to_fit($tama, $tama)
  # grabar la imágen nueva
  img.write(sudir+supre+suima)
  $cuenta = $cuenta + 1
end

# Lazo de control para las imágenes
def procesaimagenes(ventana, encab)
  # procesar las imágenes
  lazo = 0
  $cuenta = 0
  $cuenta1 = 0
  for foto in $afuente
    ventana.text(foto)
    ventana.pack()
    ventana.update
    creaborde(foto)
  end
  encab.configure('text' => "Procesadas #{$cuenta} imágenes. " )
end

# Selección de las opciones del borde
def opciones(padre)
  # definir ventana de diálogo de las opciones
  wopciones = TkToplevel.new {
    title 'Seleccione sus opciones:'
    #relief 'sunken'
    borderwidth 3
    height 80
    width 600
  }
  etiq01 = TkLabel.new(wopciones) {
    text 'Tamaño imágen:'
    place('x'=>10.0,'y'=>220.0)
  }
  # variables
  entry1 = TkEntry.new(wopciones) { background "white" }
  varia1 = TkVariable.new
  entry1.textvariable = varia1
  varia1.value = $tama
  entry1.place('height' => 25, 'width' => 50, 'x' => 140, 'y' =>  10)
  # Botón de ok
  butfin = TkButton.new(wopciones)
  butfin.configure('text' => 'Ok')
  butfin.command {
    $tama   = varia1.value.to_i
    wopciones.destroy
  }
  butfin.place('x'=>460.0,'y'=>40.0)
  # Botón de cancelar
  butcanc = TkButton.new(wopciones)
  butcanc.configure('text'=> 'Cancelar')
  butcanc.command { wopciones.destroy }
  butcanc.place('x'=>510.0,'y'=>40)
end

# Variables
$eldir   = ""
$afuente = [0]
$asalida = 0
$tama    = 640
$cuenta  = 0
$cuenta1 = 0
# procesar parámetros
Debug = 0
ayuda = 0
indice = 0
esentrada = 0
for argument in ARGV
  puts "viene -#{argument}-" if Debug == 1
  if argument == "-h"
    $ayuda = 1
  elsif argument == "--help"
    $ayuda = 1
  elsif argument == "-v"
    Debug = 1
  elsif argument == "-d"
    esentrada = -7
  elsif esentrada == 0
    $afuente[indice] = argument
    indice = indice + 1
  elsif esentrada == -7
    $tama = argument.to_i
    esentrada = 0
  end
end
# Si solicita ayuda
if ayuda == 1
  print "Uso: #{$0} [opciones] [entrada 1] ... [entrada n]\n"
  print "     #{$0} [opciones] [directorio]\n"
  print " si no especifica entrada o directorios se asume ./"
  print "  opciones:\n"
  print "  -h, --help : Esta ayuda.\n"
  print "  -d nnn     : dimensión a llenar (640)\n"
  print "  -v         : verbose\n"
  exit
end
# No se especificó la imágen(es)
if $afuente[0] == 0
  $afuente[0] = './'
end
# No se especificó el prefijo
if $asalida == 0
  $asalida = "borde/"
end
# La entrada es un directorio
if File::directory?($afuente[0])
  $eldir = $afuente[0]
  if not ($eldir[-1] == 47)
    $eldir = $eldir + "/"
  end
  atemp=Dir.entries($afuente[0])
  $afuente=atemp
end
# Abrir ventana
root = TkRoot.new { title "macborde.rb"; minsize(400,100) }
root['resizable'] = false, false
root['geometry'] = '400x150+200+200'
elenca = TkLabel.new(root) {
  text  "Por procesar #{$afuente.length} archivos"
  pack  { padx 15 ; pady 15; side 'left' }
}
eltexto=TkLabel.new(root) {
  text  ""
  pack  { padx 15 ; pady 15; side 'left' }
}
$eldato=TkLabel.new(root) {
  text  ""
  pack  { padx 15 ; pady 15; side 'left' }
}
# Botón de control
buttonexec = TkButton.new(root)
buttonexec.configure('text' => 'Ejecutar')
buttonexec.command { procesaimagenes(eltexto, elenca) }
buttonexec.place('x'=>260.0,'y'=>110.0)
# Botón de opciones
butopciones = TkButton.new(root)
butopciones.configure('text' => 'Opciones')
butopciones.command { opciones(root) }
butopciones.place('x'=>175.0,'y'=>110.0)
# Botón de salida
butcancela = TkButton.new(root)
butcancela.configure('text' => 'Salir')
butcancela.command { exit }
butcancela.place('x'=>335.0,'y'=>110.0)
# Mostrar ventana principal
Tk.mainloop

# salir
exit

Post to Twitter Post to Facebook http://marceloanelli.com/fotomac/?p=559

Script en ruby e Rmagick para poner doble borde a una imágen

Jue ,14/01/2010

site.jpg

El script publicado en el artículo Script bash e imagemagick para poner doble borde a una imágen lo he llevado a ruby. Con él se añade a una imágen un borde compuesto por dos filetes, uno blanco, alrededor de la imágen, y otro negro en donde se ubica el texto para el título y el copyright de la fotografía. El script acepta como entrada una lista de imágenes, separadas por espacios procesandose cada una de las fotografías, ó el camino de acceso de un directorio donde se aplicará a todas las imágenes del directorio. En esta versión hemos limitado a procesar solamente las imágenes tipo JPEG y PNG, pero se agregarán GIF y TIFF.

La entrada de datos es a través de la línea de comando para esta versión y proximamente será llevada a un diálogo de opciones tipo gui.

La gran ventaja de usar un lenguaje como ruby es que el programa será automaticamente multiplataforma (linux, mac y w32), y puede ser llevado, haciendo las modificaciones necesarias, a trabajar en línea en un servidor http.

Los requimientos en su sistema para ejecutar el script son los siguientes para linux:

  1. lenguaje ruby
  2. Rmagick2 (ver Rmagick), si por el contrario lo selecciona de los repositorios de su sistema operativo, seleccione el correspondiente a la librería ImageMagick para evitar conflictos.
  3. El paquete ImageMagick
  4. El paquete ruby-tk, provee la interfase gráfica (TCL/TK bindings for Ruby).

Copielo a un archivo de texto y salvelo con el nombre de macborde.rb y asignele los permisos de ejecución. Usando macborde.rb -h saldrá el texto explicativo de como usarlo. Si el archivo de entrada es un directorio convertirá todas las imágenes del mismo. El programa asume que las imágenes se guardarán en el subdirectorio ./borde

Es un trabajo en progreso y a medida que se progrese la última versión estará disponible en este artículo.
16/01/2009: actualizado.

#!/usr/bin/ruby 

require 'tk'
require 'RMagick'
include Magick

#-----------------------------------------------------
# macborde.rb
#    borde compuesto por filete blanco y otro negro
#    de anchura variable.
# autor: Marcelo Anelli C.
#
# v1.00 12/01/2010 programa base
# al    14/01/2010 interfase tk
# v1.01 15/01/2010 Diálogo de opciones
#
#-----------------------------------------------------

# Procesamiento de la imágen
def creaborde(imagen)
  # leer la imágen
  procesamos = 0
  $cuenta1 = $cuenta1 + 1
  if $eldir == ""
    sudir = File::dirname(imagen)
    suima = File::basename(imagen)
    supre = $asalida
  else
    sudir = $eldir
    suima = imagen
    supre = $asalida
  end
  if not File::directory?(sudir+supre)
    Dir::mkdir( sudir+supre )
  end
  if not (File.exist?(sudir+suima) and File.file?(sudir+suima) )
    return
  end
  $eldato.text("#{$cuenta1}: #{sudir+suima}")
  $eldato.pack()
  $eldato.update
  puts "imagen: #{sudir+suima}\n" if Debug == 1
  puts "graba:  #{sudir+supre+suima}\n" if Debug == 1
  begin
    img1 = Magick::Image.read(sudir+suima).first
  rescue
    puts "No es una imágen válida." if Debug == 1
    $eldato.text("no es una imágen")
    $eldato.pack()
    $eldato.update
    return
  end
  puts "imagen: -#{imagen}- " if Debug == 1
  puts " -#{img1.format}- " if Debug == 1
  puts " -#{img1.image_type}-\n" if Debug == 1
  if img1.format == "JPEG" or img1.format == "PNG"
    procesamos = 1
  end
  if procesamos == 0
    $eldato.text("#{img1.format} no soportado")
    $eldato.pack()
    $eldato.update
    puts "No es un formato soportado." if Debug == 1
    return
  end
  $eldato.text("#{img1.format} #{img1.image_type}")
  $eldato.pack()
  $eldato.update
  # escalarla
  img = img1.resize_to_fit($tama, $tama)
  # agregarle primer borde
  img.border!($size1,$size1,$color1)
  # agregarle segundo borde
  img.border!($size2,$size2,$color2)
  # crear y agregar texto
  ann = Magick::Draw.new
  ann.annotate(img, 0,0,0,0, $texto + ", " + $fotog) {
    self.gravity = Magick::SouthEastGravity
    self.fill = $coltex
    self.font_style = Magick::ItalicStyle
    self.font_family = "Bookman"
    self.stroke = 'transparent'
    self.pointsize = $textam
    }
  # grabar la imágen nueva
  img.write(sudir+supre+suima)
  $cuenta = $cuenta + 1
end

# Lazo de control para las imágenes
def procesaimagenes(ventana, encab)
  # procesar las imágenes
  lazo = 0
  $cuenta = 0
  $cuenta1 = 0
  for foto in $afuente
    ventana.text(foto)
    ventana.pack()
    ventana.update
    creaborde(foto)
  end
  encab.configure('text' => "Procesadas #{$cuenta} imágenes. " )
end

# Selección de las opciones del borde
def opciones(padre)
  # definir ventana de diálogo de las opciones
  wopciones = TkToplevel.new {
    title 'Seleccione sus opciones:'
    #relief 'sunken'
    borderwidth 3
    height 320
    width 600
  }
  # etiquetas
  etiq0l = TkLabel.new(wopciones) {
    text 'Color borde interno:'
    place('x'=>10.0,'y'=>10.0)
  }
  etiq02 = TkLabel.new(wopciones) {
    text 'Color borde externo:'
    place('x'=>10.0,'y'=>40.0)
  }
  etiq03 = TkLabel.new(wopciones) {
    text 'Color texto:'
    place('x'=>10.0,'y'=>70.0)
  }
  etiq04 = TkLabel.new(wopciones) {
    text 'Tamaño borde interno:'
    place('x'=>10.0,'y'=>100.0)
  }
  etiq05 = TkLabel.new(wopciones) {
    text 'Tamaño borde externo:'
    place('x'=>10.0,'y'=>130.0)
  }
  etiq06 = TkLabel.new(wopciones) {
    text 'Texto fotografías:'
    place('x'=>10.0,'y'=>160.0)
  }
  etiq07 = TkLabel.new(wopciones) {
    text 'Texto fotógrafo:'
    place('x'=>10.0,'y'=>190.0)
  }
  etiq08 = TkLabel.new(wopciones) {
    text 'Tamaño imágen:'
    place('x'=>10.0,'y'=>220.0)
  }
  etiq09 = TkLabel.new(wopciones) {
    text 'Tamaño texto:'
    place('x'=>10.0,'y'=>250.0)
  }
  # variables
  entry1 = TkEntry.new(wopciones) { background "white" }
  entry2 = TkEntry.new(wopciones) { background "white" }
  entry3 = TkEntry.new(wopciones) { background "white" }
  entry4 = TkEntry.new(wopciones) { background "white" }
  entry5 = TkEntry.new(wopciones) { background "white" }
  entry6 = TkEntry.new(wopciones) { background "white" }
  entry7 = TkEntry.new(wopciones) { background "white" }
  entry8 = TkEntry.new(wopciones) { background "white" }
  entry9 = TkEntry.new(wopciones) { background "white" }
  varia1 = TkVariable.new
  varia2 = TkVariable.new
  varia3 = TkVariable.new
  varia4 = TkVariable.new
  varia5 = TkVariable.new
  varia6 = TkVariable.new
  varia7 = TkVariable.new
  varia8 = TkVariable.new
  varia9 = TkVariable.new
  entry1.textvariable = varia1
  entry2.textvariable = varia2
  entry3.textvariable = varia3
  entry4.textvariable = varia4
  entry5.textvariable = varia5
  entry6.textvariable = varia6
  entry7.textvariable = varia7
  entry8.textvariable = varia8
  entry9.textvariable = varia9
  varia1.value = $color1
  varia2.value = $color2
  varia3.value = $coltex
  varia4.value = $size1
  varia5.value = $size2
  varia6.value = $texto
  varia7.value = $fotog
  varia8.value = $tama
  varia9.value = $textam
  entry1.place('height' => 25, 'width' => 350, 'x' => 140, 'y' =>  10)
  entry2.place('height' => 25, 'width' => 350, 'x' => 140, 'y' =>  40)
  entry3.place('height' => 25, 'width' => 350, 'x' => 140, 'y' =>  70)
  entry4.place('height' => 25, 'width' => 150, 'x' => 140, 'y' => 100)
  entry5.place('height' => 25, 'width' => 150, 'x' => 140, 'y' => 130)
  entry6.place('height' => 25, 'width' => 450, 'x' => 140, 'y' => 160)
  entry7.place('height' => 25, 'width' => 450, 'x' => 140, 'y' => 190)
  entry8.place('height' => 25, 'width' => 150, 'x' => 140, 'y' => 220)
  entry9.place('height' => 25, 'width' => 150, 'x' => 140, 'y' => 250)
  # Botón de ok
  butfin = TkButton.new(wopciones)
  butfin.configure('text' => 'Ok')
  butfin.command {
    $color1 = varia1.value
    $color2 = varia2.value
    $coltex = varia3.value
    $size1  = varia4.value.to_i
    $size2  = varia5.value.to_i
    $texto  = varia6.value
    $fotog  = varia7.value
    $tama   = varia8.value.to_i
    $textam = varia9.value.to_i
    wopciones.destroy
  }
  butfin.place('x'=>460.0,'y'=>280.0)
  # Botón de cancelar
  butcanc = TkButton.new(wopciones)
  butcanc.configure('text'=> 'Cancelar')
  butcanc.command { wopciones.destroy }
  butcanc.place('x'=>510.0,'y'=>280)
end

# Variables
$eldir   = ""
$afuente = [0]
$asalida = 0
$color1  = "white"
$color2  = "black"
$coltex  = "white"
$size1   = 30
$size2   = 50
$texto   = "Fotografías de Marcelo Anelli"
$fotog   = "Marcelo Anelli C. @ Caracas, 2010"
$tama    = 640
$textam  = 18
$cuenta  = 0
$cuenta1 = 0
# procesar parámetros
Debug = 0
ayuda = 0
indice = 0
esentrada = 0
for argument in ARGV
  puts "viene -#{argument}-" if Debug == 1
  if argument == "-h"
    $ayuda = 1
  elsif argument == "--help"
    $ayuda = 1
  elsif argument == "-v"
    Debug = 1
  elsif argument == "-c1"
    esentrada = -1
  elsif argument == "-c2"
    esentrada = -2
  elsif argument == "-s1"
    esentrada = -3
  elsif argument == "-s2"
    esentrada = -4
  elsif argument == "-t"
    esentrada = -5
  elsif argument == "-f"
    esentrada = -6
  elsif argument == "-d"
    esentrada = -7
  elsif argument == "-tt"
    esentrada = -8
  elsif argument == "-ct"
    esentrada = -9
  elsif argument == "-o"
    esentrada = -10
  elsif esentrada == 0
    $afuente[indice] = argument
    indice = indice + 1
  elsif esentrada == -1
    $color1 = argument
    esentrada = 0
  elsif esentrada == -2
    $color2 = argument
    esentrada = 0
  elsif esentrada == -3
    $size1 = argument.to_i
    esentrada = 0
  elsif esentrada == -4
    $size2 = argument.to_i
    esentrada = 0
  elsif esentrada == -5
    $texto = argument
    esentrada = 0
  elsif esentrada == -6
    $fotog = argument
    esentrada = 0
  elsif esentrada == -7
    $tama = argument.to_i
    esentrada = 0
  elsif esentrada == -8
    $textam = argument.to_i
    esentrada = 0
  elsif esentrada == -9
    $coltex = argument
    esentrada = 0
  elsif esentrada == -10
    $asalida = argument
    esentrada = 0
  end
end
# Si solicita ayuda
if ayuda == 1
  print "Uso: #{$0} [opciones] [entrada 1] ... [entrada n]\n"
  print "     #{$0} [opciones] [directorio]\n"
  print " si no especifica entrada o directorios se asume ./"
  print "  opciones:\n"
  print "  -h, --help : Esta ayuda.\n"
  print "  -c1 xxx    : color primer filete (white)\n"
  print "  -c2 xxx    : color segundo filete (black)\n"
  print "  -s1 nnn    : tamaño primer filete (30)\n"
  print "  -s2 nnn    : tamaño segundo filete (50)\n"
  print "  -t xxx     : texto de la fotografía\n"
  print "  -f xxx     : texto fotógrafo\n"
  print "  -d nnn     : dimensión a llenar (640)\n"
  print "  -tt nnn    : tamaño texto (18)\n"
  print "  -ct xxx    : color del texto (white)\n"
  print "  -o xxxx    : directorio de salida (borde/)\n"
  print "  -v         : verbose\n"
  exit
end
# No se especificó la imágen(es)
if $afuente[0] == 0
  $afuente[0] = './'
end
# No se especificó el prefijo
if $asalida == 0
  $asalida = "borde/"
end
# La entrada es un directorio
if File::directory?($afuente[0])
  $eldir = $afuente[0]
  if not ($eldir[-1] == 47)
    $eldir = $eldir + "/"
  end
  atemp=Dir.entries($afuente[0])
  $afuente=atemp
end
# Abrir ventana
root = TkRoot.new { title "macborde.rb"; minsize(400,100) }
root['resizable'] = false, false
root['geometry'] = '400x150+200+200'
elenca = TkLabel.new(root) {
  text  "Por procesar #{$afuente.length} archivos"
  pack  { padx 15 ; pady 15; side 'left' }
}
eltexto=TkLabel.new(root) {
  text  ""
  pack  { padx 15 ; pady 15; side 'left' }
}
$eldato=TkLabel.new(root) {
  text  ""
  pack  { padx 15 ; pady 15; side 'left' }
}
# Botón de control
buttonexec = TkButton.new(root)
buttonexec.configure('text' => 'Ejecutar')
buttonexec.command { procesaimagenes(eltexto, elenca) }
buttonexec.place('x'=>260.0,'y'=>110.0)
# Botón de opciones
butopciones = TkButton.new(root)
butopciones.configure('text' => 'Opciones')
butopciones.command { opciones(root) }
butopciones.place('x'=>175.0,'y'=>110.0)
# Botón de salida
butcancela = TkButton.new(root)
butcancela.configure('text' => 'Salir')
butcancela.command { exit }
butcancela.place('x'=>335.0,'y'=>110.0)
# Mostrar ventana principal
Tk.mainloop

# salir
exit

Post to Twitter Post to Facebook http://marceloanelli.com/fotomac/?p=519