logo
gfxgfx
 
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.

Ingresar con nombre de usuario, contraseña y duración de la sesión
 
gfx gfx
gfxgfx
  
gfx gfx
gfx
27947 Mensajes en 3242 Temas por 633 Usuarios - Último usuario: dibujante 28 de Agosto de 2008, 11:03:29
*
gfx*InicioAyudaInicioBuscarIngresarRegistrarsegfx
gfxgfx
Páginas: 1 [2] 3 Imprimir
Autor Tema: Bordes  (Leído 3642 veces)
redy
Moderador
*****
Mensajes: 1247


Gnudista


WWW
Re: Bordes
« Respuesta #15 : 11 de Agosto de 2007, 16:30:32 »

A todo esto ¿vas a hacer lo del curso de bash?

Si, parece que hay algunos interesados, pero todavía no tengo nada planificado. En Agosto estoy de relax, y prefiero descansar, pero en Septiembre a ver si me pongo con ello.
En línea
redy
Moderador
*****
Mensajes: 1247


Gnudista


WWW
Re: Bordes
« Respuesta #16 : 05 de Septiembre de 2007, 22:58:29 »

Si quereis añadir los símbolos de CC en el mensaje de copyright hay que instalar la fuente .ttf que podeis descargar de http://creativecommons.org/presskit y modificar un poco el script. Yo puse le fuente en
/usr/share/fonts/ttf/decoratives/cc-icons.ttf la variable CCFONT que se define al principio del script debe apuntar a dónde la tengáis vosotros...

Se añade un parámetro opcional más  que es --iconos o -i y va seguido de una cadena con una secuencia de letras tales que:

c= saca el símbolo (CC)
a= saca el símbolo de la flecha en círculo de Share Alike
b= saca el símbolo de BY
f= saca el signo igual en un círculo
n= símbolo de dolar tachado NC
m= símbolo de Sampling,"
s= símbolo de Share
p= símbolo PD de Public Domain
r= Remix
C: Logo CC"
para dejar un espacio pequeño entre símbolos usar ',', para espacio mayor ' ', por ejemplo:
Código:
-i \"c b,a\""
sacará el símbolo de (CC) espacio grande, símbolo de BY espacio pequeño, símbolo de Share Alike

ejemplo:
Código:
ponmarco -t "Ada" -i "c,b,a" prueba-marco.jpg

sacaría algo como esto:


Código:
#! /bin/bash
TIT="http://www.fotolibre.net"
COPY="$(date +%Y) Redy Rodriguez "
FONT="/usr/share/fonts/TTF/VeraBI.ttf"
CCFONT="/usr/share/fonts/ttf/decoratives/cc-icons.ttf"
ICONOS='c,b,a,'
TAMANO="20"


while [ ! -z "$1" ]; do

  PARAM="$1"
  case $PARAM in
        "--help"|--usage|-h)
           echo ""
           echo "Uso:"
           echo ""
           echo "  $0 --help|--usage|-h Muestra esta ayuda"
           echo "  $0 [opciones] img-1 [... img-n]  [... [opciones] img-n1 [... img-nn]]"
           echo ""
           echo "  opciones disponibles:"
           echo ""
           echo "   --titulo|-t      \"Título que aparece abajo a la izquierda\""
           echo "   --copyright|-c   \"Mensaje de copyright que aparece a la derecha\""
           echo "   --font|-f        Estilo de letra o fichero de fuente .ttf"
           echo "   --tamano|-s      Tamaño de la letra en puntos"
           echo "   --tamanomarco|-g Ancho del marco en pixels"
           echo "   --iconos|-i      Iconos previos al mensaje de copyright:"
           echo "                     c=(CC), a=SA, b= BY, f=(=), n=NC, m=Sampling,"
           echo "                     s=Share, p=PD r=Remix, C:Logo CC"
           echo "                       para dejar un espacio pequeño entre símbolos"
           echo "                       usar ',', para espacio mayor ' ', por ejemplo:"
           echo "                       -i \"c b,a\""
           echo ""
           exit 0
        ;;
        "--titulo"|"-t")
           shift
           TIT="$1"
        ;;

        "--copyright"|"-c")
           shift
           COPY=$1
        ;;

        "--iconos"|"-i")
           shift
           ICONOS=$1
        ;;

        "--font"|"-f")
           shift
           FONT=$1
        ;;

        "--tamano"|"-s")
           shift
           TAMANO=$1
        ;;

        "--tamanomarco"|"-g")
           shift
           tamanomarco=$1
        ;;

         
        *)
           if [ -f "$PARAM" ]; then
               IMAGEN="$PARAM"
               imageSize="$(identify -format "%w %h" "$IMAGEN")"
               imageX="${imageSize%% *}"
               imageY="${imageSize##* }"
               if [ -z $tamanomarco ]; then
                  if [ $imageX -gt $imageY ]; then MAXsize=imageX; else MAXsize=imageY; fi
                  INCR="$(( MAXsize / 32 ))"
                  if [ "$INCR" -lt 28 ]; then INCR=28; fi
               else
                  INCR=$tamanomarco
               fi
               TAMANOMARCO="$((imageX + INCR * 2 ))x$((imageY + INCR * 2))!"
               echo "$IMAGEN -> $TIT - $COPY - $FONT - $TAMANO - $INCR - $TAMANOMARCO"

               convert \( "$IMAGEN" -resize "$TAMANOMARCO"\
                  -fill black -colorize 60%\
                  -fill "#ffa200" -font "$FONT"  -pointsize "$TAMANO"\
                  -draw "gravity southwest text 5,2 '$TIT'" \
                  -gravity southeast \
                  \( -background none -fill "#ffa200" -pointsize "$(( TAMANO * 100 / 75 ))" \
                       -font "$CCFONT" label:"$ICONOS" \
                       -font "$FONT" -pointsize "$TAMANO" label:"$COPY" +append \) \
                  -composite \) \
                  \( "$IMAGEN"  -mattecolor "#ffa200" -frame 2x2+1+1 \) -gravity center \
                  -compose src-in -composite f-"$IMAGEN"
                 
           fi
        ;;
  esac
  shift
done

« Última modificación: 06 de Septiembre de 2007, 08:23:19 por redy » En línea
hombre_invisible
Moderador
*****
Mensajes: 2780


SEMEN RETENTIVUS, VENENUM EST


WWW
Re: Bordes
« Respuesta #17 : 05 de Septiembre de 2007, 23:10:12 »

Muy bueno, redy, llevaba un tiempo dándole vueltas al tema de introducir estos símbolos para mis marcos.
Gracias por el descubrimiento.  Sombrero
En línea

Colegota
Moderador
*****
Mensajes: 3028


¡Me faltan carretes!


WWW
Re: Bordes
« Respuesta #18 : 06 de Septiembre de 2007, 11:01:34 »

Buenas,

Redy, te está quedando un script impresionante.  Sombrero
Ya me he bajado la fuente y a ver cuando me puedo volver a liar con fotos y probarlo que últimamente ando liado y no me queda tiempo "para mis cosas". Incluyendo lo de responder mensajes...

Saludos,
Colegota
En línea

[Canon EOS 50 40D (sin diapos ni nada)] [Escáner Minolta DSE 5400] [Vuescan] [El GIMP] [Galería] [Página de Viajes]
Colegota
Moderador
*****
Mensajes: 3028


¡Me faltan carretes!


WWW
Re: Bordes
« Respuesta #19 : 06 de Septiembre de 2007, 11:12:15 »

Se me ha olvidado comentar que tienes una modelo en casa como para llenar la sección de retratos. A ver si os animáis.  Sonrie, foto

Saludos,
Colegota
En línea

[Canon EOS 50 40D (sin diapos ni nada)] [Escáner Minolta DSE 5400] [Vuescan] [El GIMP] [Galería] [Página de Viajes]
redy
Moderador
*****
Mensajes: 1247


Gnudista


WWW
Re: Bordes
« Respuesta #20 : 07 de Septiembre de 2007, 00:25:02 »

Se me ha olvidado comentar que tienes una modelo en casa como para llenar la sección de retratos.

Gracias, la foto no es muy afortunada, entraba demasiado sol por una ventana y el pelo y el brazo se churrascaron un poco, además hay un reflejo verde que debe ser culpa del sol, los personajes del fondo despistan un poco.... Pero ¿a que el marco le queda bien Guiño?

Y como yo no paro le hice otra modificación al script se pueden usar macros en el título:

Es necesario tener instalado exiftool para que se puedan coger los datos exif de la foto. Con esto puedes poner por ejemplo los títulos en el comentario exif y usar el script con el parámetro -t "%C %D" para un montón de fotos y les pondrá como título el comentario si lo tiene o si no el nombre del fichero seguido de la fecha y hora en que se hizo la foto, o si no tiene ese dato exif la fecha del fichero.

Pasar un -h o leer el código para ver todas las posibles macros...

Código:
#! /bin/bash
TIT="http://www.fotolibre.net"
COPY="$(date +%Y) Pon tu nombre aquí "
FONT="/usr/share/fonts/TTF/VeraBI.ttf"
CCFONT="/usr/share/fonts/ttf/decoratives/cc-icons.ttf"
ICONOS='c,b,a,'
TAMANO="20"

macrotit()
{
  local inicio resto1 resto result
  if [ ! -z "$1" ]; then
    inicio="${1%%\%*}"
    resto1="${1:$(( ${#inicio} + 1 )):1}"
    resto="${1:$(( ${#inicio} + 2 ))}"
    case $resto1 in
       F )  # Nombre del fichero
          result="$(basename "$2")"
       ;;
       f )  # Nombre del fichero sin extensión
          result="$(basename "$2" ".${2##*.}")"
          ;;   
       d )  # Fecha de disparo, o si no existe del fichero
          result="$(exiftool -d "%x %X" -DateTimeOriginal -S -s "$2")"
          if [ -z result ]; then
             result="$(date -r "$2" "+%x %X")"
          fi
          ;;         
         
       D )  # Fecha del fichero
          result="$(date -r "$2" "+%x %X")"
          ;;
       s )  # Velocidad del obturador
          result="$(exiftool -S -s -ShutterSpeed "$2")"
          ;;         
       a )  # Apertura del diafragma
          result="$(exiftool -AFAperture -S -s "$2")"
          ;;         
       l )  # Longitud focal de la lente
          result="$(exiftool -FocalLength -S -s "$2")"
          ;;         
       L )  # Longitud focal equivalente en 35mm (o si no se puede obtener, la real)
          result="$(exiftool -FocalLengthIn35mmFormat -S -s "$2")"
          if [ -z result ]; then
                result="$(exiftool -FocalLength -S -s "$2")"
          fi
          ;;         
       c )  # Comentario de usuario
          result="$(exiftool -UserComment -S -s "$2")"
          ;;
       C )  # Comentario de usuario, o si no existe, nombre del fichero
          result="$(exiftool -UserComment -S -s "$2")"
          if [ -z result ]; then
               result="$(basename "$2")"
          fi
          ;;
       * )
          result="$resto1"
          ;;
    esac
   
    echo -n "${inicio}${result}$(macrotit "${resto}" "$2")"
  fi
}


while [ ! -z "$1" ]; do

  PARAM="$1"
  case $PARAM in
        "--help"|--usage|-h)
           echo ""
           echo "Uso:"
           echo ""
           echo "  $0 --help|--usage|-h Muestra esta ayuda"
           echo "  $0 [opciones] img-1 [... img-n]  [... [opciones] img-n1 [... img-nn]]"
           echo ""
           echo "  opciones disponibles:"
           echo ""
           echo "   --titulo|-t      \"Título que aparece abajo a la izquierda\""
           echo "           En el título se pueden usar las siguentes macros:"
           echo "               %F Nombre del fichero"
           echo "               %f Nombre del fichero sin extensión"
           echo "               %d Fecha de disparo, o si no existe del fichero"
           echo "               %D Fecha del fichero"
           echo "               %s Velocidad del obturador"
           echo "               %a Apertura del diafragma."
           echo "               %l Longitud focal de la lente."
           echo "               %L Longitud focal equivalente en 35mm "
           echo "                  (o si no se puede obtener, la real)."
           echo "               %c Comentario de usuario."
           echo "               %C Comentario de usuario, o si no existe,"
           echo "                  nombre del fichero."
           echo "   --copyright|-c   \"Mensaje de copyright que aparece a la derecha\""
           echo "   --font|-f        Estilo de letra o fichero de fuente .ttf"
           echo "   --tamano|-s      Tamaño de la letra en puntos"
           echo "   --tamanomarco|-g Ancho del marco en pixels"
           echo "   --iconos|-i      Iconos previos al mensaje de copyright:"
           echo "                     c=(CC), a=SA, b= BY, f=(=), n=NC, m=Sampling,"
           echo "                     s=Share, p=PD r=Remix, C:Logo CC"
           echo "                       para dejar un espacio pequeño entre símbolos"
           echo "                       usar ',', para espacio mayor ' ', por ejemplo:"
           echo "                       -i \"c b,a\""
           echo ""
           exit 0
        ;;
        "--titulo"|"-t")
           shift
           TIT="$1"
        ;;

        "--copyright"|"-c")
           shift
           COPY=$1
        ;;

        "--iconos"|"-i")
           shift
           ICONOS=$1
        ;;

        "--font"|"-f")
           shift
           FONT=$1
        ;;

        "--tamano"|"-s")
           shift
           TAMANO=$1
        ;;

        "--tamanomarco"|"-g")
           shift
           tamanomarco=$1
        ;;

         
        *)
           if [ -f "$PARAM" ]; then
               IMAGEN="$PARAM"
               imageSize="$(identify -format "%w %h" "$IMAGEN")"
               imageX="${imageSize%% *}"
               imageY="${imageSize##* }"
               if [ -z $tamanomarco ]; then
                  if [ $imageX -gt $imageY ]; then MAXsize=imageX; else MAXsize=imageY; fi
                  INCR="$(( MAXsize / 33 * 2 ))"
                  if [ "$INCR" -lt 28 ]; then INCR=28; fi
               else
                  INCR=$tamanomarco
               fi
               TAMANOMARCO="$((imageX + INCR * 2 ))x$((imageY + INCR * 2))!"
               echo "$IMAGEN -> $TIT - $COPY - $FONT - $TAMANO - $INCR - $TAMANOMARCO"

               MTIT=$(macrotit "$TIT" "$IMAGEN")

               convert \( "$IMAGEN" -resize "$TAMANOMARCO"\
                  -fill black -colorize 60%\
                  -fill "#ffa200" -font "$FONT"  -pointsize "$TAMANO"\
                  -draw "gravity southwest text 5,2 '$MTIT'" \
                  -gravity southeast '-geometry +5+2' \
                  \( -background none -fill "#ffa200" -pointsize "$(( TAMANO * 100 / 75 ))" \
                       -font "$CCFONT" label:"$ICONOS" \
                       -font "$FONT" -pointsize "$TAMANO" label:"$COPY" +append \) \
                  -composite \) \
                  \( "$IMAGEN"  -mattecolor "#ffa200" -frame 2x2+1+1 \) -gravity center \
                  -geometry +0+0 -compose src-in -composite f-"$IMAGEN"
                 
           fi
        ;;
  esac
  shift
done
« Última modificación: 07 de Septiembre de 2007, 13:50:35 por redy » En línea
Colegota
Moderador
*****
Mensajes: 3028


¡Me faltan carretes!


WWW
Re: Bordes
« Respuesta #21 : 07 de Septiembre de 2007, 11:11:29 »

Buenas,

Se me ha olvidado comentar que tienes una modelo en casa como para llenar la sección de retratos.
Gracias, la foto no es muy afortunada, entraba demasiado sol por una ventana y el pelo y el brazo se churrascaron un poco, además hay un reflejo verde que debe ser culpa del sol, los personajes del fondo despistan un poco.... Pero ¿a que el marco le queda bien Guiño?

hablaba de la modelo, no de la foto. Guiño Además de que la he visto en otras por ahí y parece que le gusta posar.

Lo del exif creo que puede ser útil a mucha gente. Aunque tiene el inconveniente de que el GIMP cuando creas una imagen nueva (duplicados, copias) no arrastra esa información. Me parece haber leído que en la 2.4 ya lo hace.

El comentario puede ser útil cuando se escriba cortito. Yo tengo un "semi-tocho" en un fichero de texto copyleft.txt que dice:

Copyleft smile3 Colegota 2007.
Puedes copiar, distribuir, publicar y modificar esta fotografia bajo las condiciones expresadas en http://mapamundi.info/licenciaCCbysa


por lo que mejor no lo pongo en el marco.  Ejem...

Por si a alguno le vale, esto es para ponerlo:

Código:
for IMAGEN in $1*.jpg
do

  echo $IMAGEN

  mogrify -comment @$HOME/talleres/copyleft.txt $IMAGEN

done

Respecto a las experiencias con el script, noto que hay cosas que varían con el tamaño de las fotos. Yo se lo estoy poniendo a las originales que salen de la cámara y el marco calculado era de 51 puntos, por lo que se lo doy como parámetro en 38. Ya que el tamaño de la fuente también lo he aumentado a 24.

Otro tema es que me parece que falta un text 5,2 para el texto del lado derecho que se pega mucho al borde.

Saludos,
Colegota
En línea

[Canon EOS 50 40D (sin diapos ni nada)] [Escáner Minolta DSE 5400] [Vuescan] [El GIMP] [Galería] [Página de Viajes]
redy
Moderador
*****
Mensajes: 1247


Gnudista


WWW
Re: Bordes
« Respuesta #22 : 07 de Septiembre de 2007, 13:31:27 »

El comentario puede ser útil cuando se escriba cortito.

Si claro, cualquier cosa larga se saldría de la foto...

Citar
Respecto a las experiencias con el script, noto que hay cosas que varían con el tamaño de las fotos.

Solo el ancho del marco, que se calcula como un porcentaje del lado mayor (un 3%) aproximadamente, aunque en esta última versión creo que se me ha colado un '* 2' de más y sale un 6%. Este ancho variable tiene un mínimo de 28 pixels. Si el 3% del lado mayor es menor de 28 se fija a 28.  Todo eso claro está siempre que no se especifique un valor fijo, en cuyo caso no se calcula como un porcentaje. Quizá la fuente también debiera ser de tamaño variable, en función del ancho del marco pero no lo puse así.

Quizá lo mejor sería calcular el ancho como un 3% (con ese mínimo de 28 pixels) y la fuente establecerla a un tamaño en puntos de unos 3/5 del ancho del marco. Todo ello siempre y cuando el usuario no se pase otros valores. Haré pruebas y si tal lo subo modificado.

Otra cosa que estoy elucubrando es la posibilidad de poder pasarle como parámetro el lugar dónde pone el título y el copyright (Arriba izquierda, arriba centro, arriba derecha, abajo izquierda, abajo derecha o abajo centro), e incluso poder poner hasta cuatro mensajes, por ejemplo poner abajo el título y el copyright y arriba la fecha a un lado y los datos de diafragma longitud focal y exposición al otro, o como quiera ponerlo el usuario....

Citar

Otro tema es que me parece que falta un text 5,2 para el texto del lado derecho que se pega mucho al borde.


Si eso es solo cuestión de añadirle un '-geometry +5+2' justo después del primer '-gravity southeast' ya lo corrijo.

¡OOPS! Hay que volver a ponerle un '-gravity +0+0' después del '-gravity center' del compose central, si no lo descentra 2 y 5 pixels....
« Última modificación: 07 de Septiembre de 2007, 13:49:45 por redy » En línea
hombre_invisible
Moderador
*****
Mensajes: 2780


SEMEN RETENTIVUS, VENENUM EST


WWW
Re: Bordes
« Respuesta #23 : 07 de Septiembre de 2007, 13:34:23 »

 umnik2 Algún día, cuando esté más aburrido de lo que normalmente estoy, miraré estas cosillas...  umnik2
En línea

Colegota
Moderador
*****
Mensajes: 3028


¡Me faltan carretes!


WWW
Re: Bordes
« Respuesta #24 : 07 de Septiembre de 2007, 15:34:22 »

Buenas,

antes de nada, con lo de que cambia el comportamiento con el tamaño me refería a la imagen en sí. No al script.

Esto es, si estás poniendo el marco a una foto de 1024x768 un tamaño de fuente de 18 puede estar bien, pero si la imagen es de 1700x1300 (o más) o pones una fuente de 24 o proporcionalmente queda muy pequeña. Y esto se nota cuando la subimos al almacén y luego ponemos la versión reducida en el foro.

Lo del marco es cuestión de gustos, creo. Tú por ejemplo pones un marco que es algo más ancho que el que ponía yo originalmente. Al aplicar directamente tu script el porcentaje calculaba un ancho de 51 para el tamaño de mis fotos y me resultaba un marco muy ancho con una fuente muy pequeña. Como el script lo prevé todo smile3 le estaba dando el ancho como argumento. Así que sin problemas.

Lo que creo que es una buena línea de trabajo es ligar el tamaño del marco al de la fuente o viceversa. Mi combinación ideal me ha resultado 24/38. Lo que pasa es que si lo ligas a un porcentaje del lado más largo, cuando este es muy largo (en pixeles) te ocurre como a mí que me salía 51 pixeles para el marco y eso era mucho para mi gusto.
Otra cosa es que el filete entre el marco y la foto para según qué combinaciones de anchos y tamaños se pierde un poco en unos lados u otros. Por ejemplo en mi caso, con un marco de 32 no quedaba bien, pero con un 38 sí.

Respecto a lo de los títulos, por poder incluso lo puedes poner centrados.  Ejem... Tal vez se pudiera hacer simplemente un posicionamiento a añadir al título y al copyright. Aunque para permitir varios "títulos" o textos o pones seis comandos diferentes o prevés la posibilidad de que se pueda poner varias veces el parámetro de título.

¡Esto mejora cada día!  good

Saludos,
Colegota
En línea

[Canon EOS 50 40D (sin diapos ni nada)] [Escáner Minolta DSE 5400] [Vuescan] [El GIMP] [Galería] [Página de Viajes]
redy
Moderador
*****
Mensajes: 1247


Gnudista


WWW
Re: Bordes
« Respuesta #25 : 10 de Septiembre de 2007, 09:55:53 »


¡Esto mejora cada día!  good


A ver así:

Por defecto sigue siendo como los anteriores, salvo que el ancho del marco y tamaño de la fuente van relacionados, siempre que no especifiquemos un tamaño de fuente, claro. Se añaden --título1 y --título2 (o -t1 y -t2)  como opciones y se pueden especificar las posiciones de todo:


  opciones disponibles:

   --tamanomarco|-g Ancho del marco en pixels.

   --titulo|-t      "Título de la foto"
   --titulo1|-t1    "Puede haber hasta 3 títulos (t, t1 y t2)"
   --titulo2|-t2    "t1 y t2 por defecto están en blanco"
           En los título se pueden usar las siguentes macros:
               %F Nombre del fichero
               %f Nombre del fichero sin extensión
               %d Fecha de disparo, o si no existe del fichero
               %D Fecha del fichero
               %s Velocidad del obturador
               %a Apertura del diafragma.
               %l Longitud focal de la lente.
               %L Longitud focal equivalente en 35mm
                  (o si no se puede obtener, la real).
               %c Comentario de usuario.
               %C Comentario de usuario, o si no existe,
                  nombre del fichero.

   --copyright|-c   "Mensaje de copyright que aparece a la derecha"
   --iconos|-i      Iconos previos al mensaje de copyright:
                     c=(CC), a=SA, b= BY, f=(=), n=NC, m=Sampling,
                     s=Share, p=PD r=Remix, C:Logo CC
                       para dejar un espacio pequeño entre símbolos
                       usar ',', para espacio mayor ' ', por ejemplo:
                       -i "c b,a"

   --font|-f        Estilo de letra o fichero de fuente .ttf para título
                    y mensaje de copyright
   --font1|-f1      Fuente para el título1 (por defecto la misma que título)
   --font2|-f2      Fuente para el titulo2 (por defecto la misma que título)
   --tamano|-s      Tamaño de la letra en puntos para título y copyright
   --tamano1|-t1    Tamaño de letra para título1 (por defecto = título)
   --tamano2|-t2    Tamaño de letra para título2 (por defecto = título)

   --ptitulo|-p     Posición para título (Por defecto 4)
   --ptitulo1|-p1   Posición para título1 (Por defecto 1)
   --ptitulo2|-p2   Posición para título2 (Por defecto 3)
   --pcopy|-q       Posición para copyright (Por defecto 6)

                Las posicioones posibles son:
                1 - Arriba izquierda     4 - Abajo izquierda
                2 - Arriba centrado      5 - Abajo centrado
                3 - Arriba derecha       6 - Abajo derecha


El código parece haber crecido muchísimo pero en realidad todo es para analizar parámetros, definir valores por defecto, mostrar la ayuda, verificar valores, calcular porcentajes...

El alma del script sigue siendo un solo comando convert. Algo más complicado que al principio, porque ya ocupa creo que cerca de 15 líneas con tres niveles de paréntesis, pero al fin y al cabo, es un único comando. Potente el Imagemagic ¡Eh!

Código:
#! /bin/bash
#  Versión 1.1 (La casidefinitiva)

# Valores por defecto
TIT="http://www.fotolibre.net"
TIT1=""
TIT2=""
COPY="$(date +%Y) Pon Tu Nombre Aquí"
FONT="/usr/share/fonts/TTF/VeraBI.ttf"
FONT1="$FONT"
FONT2="$FONT"
CCFONT="/usr/share/fonts/ttf/decoratives/cc-icons.ttf"
ICONOS='c,b,a'
DTAMANO=""  # Los tamaños de fuente calculan luego como 3/5 del ancho del Marco
DTAMANO1=""
DTAMANO2=""
POS="southwest"
POS1="northwest"
POS2="northeast"
POSCOPY="southeast"

# Array para traducir los valores numéricos 1-6 a las posiciones que
# hay que pasar a imagemagick con el parámetro gravity
POSICIONES=( "" northwest north northeast southwest south southeast )

macrotit() ## Resuelve las macros de los títulos
{
  local inicio resto1 resto result
  if [ ! -z "$1" ]; then
    inicio="${1%%\%*}"
    resto1="${1:$(( ${#inicio} + 1 )):1}"
    resto="${1:$(( ${#inicio} + 2 ))}"
    case $resto1 in
       F )  # Nombre del fichero
          result="$(basename "$2")"
       ;;
       f )  # Nombre del fichero sin extensión
          result="$(basename "$2" ".${2##*.}")"
          ;;
       d )  # Fecha de disparo, o si no existe del fichero
          result="$(exiftool -d "%x %X" -DateTimeOriginal -S -s "$2")"
          if [ -z result ]; then
             result="$(date -r "$2" "+%x %X")"
          fi
          ;;

       D )  # Fecha del fichero
          result="$(date -r "$2" "+%x %X")"
          ;;
       s )  # Velocidad del obturador
          result="$(exiftool -S -s -ShutterSpeed "$2")"
          ;;
       a )  # Apertura del diafragma
          result="$(exiftool -AFAperture -S -s "$2")"
          ;;
       l )  # Longitud focal de la lente
          result="$(exiftool -FocalLength -S -s "$2")"
          ;;
       L )  # Longitud focal equivalente en 35mm (o si no se puede obtener, la real)
          result="$(exiftool -FocalLengthIn35mmFormat -S -s "$2")"
          if [ -z result ]; then
                result="$(exiftool -FocalLength -S -s "$2")"
          fi
          ;;
       c )  # Comentario de usuario
          result="$(exiftool -UserComment -S -s "$2")"
          ;;
       C )  # Comentario de usuario, o si no existe, nombre del fichero
          result="$(exiftool -UserComment -S -s "$2")"
          if [ -z result ]; then
               result="$(basename "$2")"
          fi
          ;;
       * )
          result="$resto1"
          ;;
    esac
    ## Se podría hacer de otra forma pero preferí la recursividad
    ## La funcion resuelve el primer % y luego se llama a si misma con
    ## el resto hasta que el resto es la cadena vacía.
    echo -n "${inicio}${result}$(macrotit "${resto}" "$2")"
  fi
}


while [ ! -z "$1" ]; do

  PARAM="$1"
  case $PARAM in
        "--help"|--usage|-h)
           echo ""
           echo "Uso:"
           echo ""
           echo "  $0 --help|--usage|-h Muestra esta ayuda"
           echo "  $0 [opciones] img-1 [... img-n]  [... [opciones] img-n1 [... img-nn]]"
           echo ""
cat <<FINDETEXTO
  opciones disponibles:

   --tamanomarco|-g Ancho del marco en pixels.

   --titulo|-t      "Título de la foto"
   --titulo1|-t1    "Puede haber hasta 3 títulos (t, t1 y t2)"
   --titulo2|-t2    "t1 y t2 por defecto están en blanco"
           En los título se pueden usar las siguentes macros:
               %F Nombre del fichero
               %f Nombre del fichero sin extensión
               %d Fecha de disparo, o si no existe del fichero
               %D Fecha del fichero
               %s Velocidad del obturador
               %a Apertura del diafragma.
               %l Longitud focal de la lente.
               %L Longitud focal equivalente en 35mm
                  (o si no se puede obtener, la real).
               %c Comentario de usuario.
               %C Comentario de usuario, o si no existe,
                  nombre del fichero.

   --copyright|-c   "Mensaje de copyright que aparece a la derecha"
   --iconos|-i      Iconos previos al mensaje de copyright:
                     c=(CC), a=SA, b= BY, f=(=), n=NC, m=Sampling,
                     s=Share, p=PD r=Remix, C:Logo CC
                       para dejar un espacio pequeño entre símbolos
                       usar ',', para espacio mayor ' ', por ejemplo:
                       -i "c b,a"

   --font|-f        Estilo de letra o fichero de fuente .ttf para título
                    y mensaje de copyright
   --font1|-f1      Fuente para el título1 (por defecto la misma que título)
   --font2|-f2      Fuente para el titulo2 (por defecto la misma que título)
   --tamano|-s      Tamaño de la letra en puntos para título y copyright
   --tamano1|-t1    Tamaño de letra para título1 (por defecto = título)
   --tamano2|-t2    Tamaño de letra para título2 (por defecto = título)

   --ptitulo|-p     Posición para título (Por defecto 4)
   --ptitulo1|-p1   Posición para título1 (Por defecto 1)
   --ptitulo2|-p2   Posición para título2 (Por defecto 3)
   --pcopy|-q       Posición para copyright (Por defecto 6)

                Las posicioones posibles son:
                1 - Arriba izquierda     4 - Abajo izquierda
                2 - Arriba centrado      5 - Abajo centrado
                3 - Arriba derecha       6 - Abajo derecha

FINDETEXTO
           exit 0
        ;;
        "--titulo"|"-t")
           shift
           TIT="$1"
        ;;
        "--titulo1"|"-t1")
           shift
           TIT1="$1"
        ;;
        "--titulo2"|"-t2")
           shift
           TIT2="$1"
        ;;

        "--copyright"|"-c")
           shift
           COPY=$1
        ;;

        "--iconos"|"-i")
           shift
           ICONOS=$1
        ;;

        "--font"|"-f")
           shift
           FONT=$1
        ;;

        "--font1"|"-f1")
           shift
           FONT1=$1
        ;;

        "--font2"|"-f2")
           shift
           FONT2=$1
        ;;

        "--tamano"|"-s")
           shift
           DTAMANO=$1
        ;;


        "--tamano1"|"-s1")
           shift
           DTAMANO1=$1
        ;;


        "--tamano2"|"-s2")
           shift
           DTAMANO2=$1
        ;;



        "--tamanomarco"|"-g")
           shift
           tamanomarco=$1
        ;;

        "--ptitulo"|"-p")
           shift
           if [ "$(( $1 ))"  -gt 0 -a "$(( $1 ))"  -le 6  ]; then
              POS=${POSICIONES[$1]}
           fi
        ;;


        "--ptitulo1"|"-p1")
           shift
           if [ "$(( $1 ))"  -gt 0 -a "$(( $1 ))"  -le 6  ]; then
              POS1=${POSICIONES[$1]}
           fi