Autor Tema: Bordes  (Leído 71137 veces)

redy

  • Moderador
  • Bimilenari@
  • *****
  • Mensajes: 2897
  • Gnudista
    • Esteropes El Cíclope
Re: Bordes
« Respuesta #15 on: 11 ago 2007, 12:30 pm »
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.
Admiro a la gente que sabe contar historias solamente con sus fotos, porque en el fondo las fotos son como los chistes; si tienes que explicarlas es que no son buenas...


redy

  • Moderador
  • Bimilenari@
  • *****
  • Mensajes: 2897
  • Gnudista
    • Esteropes El Cíclope
Re: Bordes
« Respuesta #16 on: 05 sep 2007, 18:58 pm »
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: [Seleccionar]
-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: [Seleccionar]
ponmarco -t "Ada" -i "c,b,a" prueba-marco.jpg
sacaría algo como esto:


Código: [Seleccionar]
#! /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 sep 2007, 04:23 am por redy »
Admiro a la gente que sabe contar historias solamente con sus fotos, porque en el fondo las fotos son como los chistes; si tienes que explicarlas es que no son buenas...


invisible

  • Moderador
  • Palizas oficial
  • *****
  • Mensajes: 8097
    • INVItARTE
Re: Bordes
« Respuesta #17 on: 05 sep 2007, 19:10 pm »
Muy bueno, redy, llevaba un tiempo dándole vueltas al tema de introducir estos símbolos para mis marcos.
Gracias por el descubrimiento.  q:)
"Si quieres ver lo invisible, observa con atención lo visible."
                                                     Manuel Álvarez Bravo (1902-2002)

Colegota

  • Palizas oficial
  • *
  • Mensajes: 8188
  • ¡Me faltan carretes!
    • ¡Me faltan carretes!
Re: Bordes
« Respuesta #18 on: 06 sep 2007, 07:01 am »
Buenas,

Redy, te está quedando un script impresionante.  q:)
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
[Canon EOS 50 40D (sin diapos ni nada)] [Escáner Minolta DSE 5400] [Vuescan] [El GIMP] [Galería] [Página de Viajes]

Colegota

  • Palizas oficial
  • *
  • Mensajes: 8188
  • ¡Me faltan carretes!
    • ¡Me faltan carretes!
Re: Bordes
« Respuesta #19 on: 06 sep 2007, 07:12 am »
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.  @)

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

redy

  • Moderador
  • Bimilenari@
  • *****
  • Mensajes: 2897
  • Gnudista
    • Esteropes El Cíclope
Re: Bordes
« Respuesta #20 on: 06 sep 2007, 20:25 pm »
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 ;)?

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: [Seleccionar]
#! /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 sep 2007, 09:50 am por redy »
Admiro a la gente que sabe contar historias solamente con sus fotos, porque en el fondo las fotos son como los chistes; si tienes que explicarlas es que no son buenas...


Colegota

  • Palizas oficial
  • *
  • Mensajes: 8188
  • ¡Me faltan carretes!
    • ¡Me faltan carretes!
Re: Bordes
« Respuesta #21 on: 07 sep 2007, 07:11 am »
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 ;)?

hablaba de la modelo, no de la foto. ;) 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 :) 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: [Seleccionar]
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
[Canon EOS 50 40D (sin diapos ni nada)] [Escáner Minolta DSE 5400] [Vuescan] [El GIMP] [Galería] [Página de Viajes]

redy

  • Moderador
  • Bimilenari@
  • *****
  • Mensajes: 2897
  • Gnudista
    • Esteropes El Cíclope
Re: Bordes
« Respuesta #22 on: 07 sep 2007, 09:31 am »
El comentario puede ser útil cuando se escriba cortito.

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

Cita
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....

Cita

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 sep 2007, 09:49 am por redy »
Admiro a la gente que sabe contar historias solamente con sus fotos, porque en el fondo las fotos son como los chistes; si tienes que explicarlas es que no son buenas...


invisible

  • Moderador
  • Palizas oficial
  • *****
  • Mensajes: 8097
    • INVItARTE
Re: Bordes
« Respuesta #23 on: 07 sep 2007, 09:34 am »
 :-? Algún día, cuando esté más aburrido de lo que normalmente estoy, miraré estas cosillas...  :-?
"Si quieres ver lo invisible, observa con atención lo visible."
                                                     Manuel Álvarez Bravo (1902-2002)

Colegota

  • Palizas oficial
  • *
  • Mensajes: 8188
  • ¡Me faltan carretes!
    • ¡Me faltan carretes!
Re: Bordes
« Respuesta #24 on: 07 sep 2007, 11:34 am »
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 :) 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!  :-)

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

redy

  • Moderador
  • Bimilenari@
  • *****
  • Mensajes: 2897
  • Gnudista
    • Esteropes El Cíclope
Re: Bordes
« Respuesta #25 on: 10 sep 2007, 05:55 am »

¡Esto mejora cada día!  :-)


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: [Seleccionar]
#! /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
        ;;

        "--ptitulo2"|"-p2")
           shift
           if [ "$(( $1 ))"  -gt 0 -a "$(( $1 ))"  -le 6  ]; then
              POS2=${POSICIONES[$1]}
           fi
        ;;

        "--pcopy"|"-q")
           shift
           if [ "$(( $1 ))"  -gt 0 -a "$(( $1 ))"  -le 6  ]; then
              POSCOPY=${POSICIONES[$1]}
           fi
        ;;


        "--pcopy"|"-q")
           shift
           if [ "$(( $1 ))"  -gt 0 -a "$(( $1 ))"  -le 6  ]; then
              POSCOPY=${POSICIONES[$1]}
           fi
        ;;


        *)
           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 ))"
                  if [ "$INCR" -lt 36 ]; then INCR=36; fi
               else
                  INCR=$tamanomarco
               fi

               TAMANOMARCO="$((imageX + INCR * 2 ))x$((imageY + INCR * 2))!"
               if !(( DTAMANO >= 1 )); then
                   TAMANO="$(( INCR * 3 / 5 ))"
               else
                   TAMANO="$DTAMANO"
               fi
               if !(( DTAMANO1 >= 1 )); then
                   TAMANO1="$(( INCR * 3 / 5 ))"
               else
                   TAMANO1="$DTAMANO1"
               fi
               if !(( DTAMANO2 >= 1 )); then
                   TAMANO2="$(( INCR * 3 / 5 ))"
               else
                   TAMANO2="$DTAMANO2"
               fi

               MTIT=$(macrotit "$TIT" "$IMAGEN")
               MTIT1=$(macrotit "$TIT1" "$IMAGEN")
               MTIT2=$(macrotit "$TIT2" "$IMAGEN")

               # echo "$IMAGEN -> $MTIT - $MTIT1 -$MTIT2 - $COPY - $FONT - $TAMANO - $INCR - $TAMANOMARCO"
               echo "Poniendo marco a -> $IMAGEN"

               convert \( "$IMAGEN" -resize "$TAMANOMARCO"\
                  -fill black -colorize 60%\
                  -fill "#ffa200" -font "$FONT"  -pointsize "$TAMANO"\
                  -draw "gravity "$POS" text 5,2 '$MTIT'" \
                  -fill "#ffa200" -font "$FONT1"  -pointsize "$TAMANO1"\
                  -draw "gravity "$POS1" text 5,2 '$MTIT1'" \
                  -fill "#ffa200" -font "$FONT2"  -pointsize "$TAMANO2"\
                  -draw "gravity "$POS2" text 5,2 '$MTIT2'" \
                  \( -background none -fill "#ffa200" -pointsize "$(( TAMANO * 100 / 75 ))" \
                       -font "$CCFONT" label:"$ICONOS" \
                       -font "$FONT" -pointsize "$TAMANO" label:"$COPY" +append \) \
                       -gravity "$POSCOPY" -geometry +5+2 -composite \) \
                  \( "$IMAGEN"  -mattecolor "#ffa200" -frame 2x2+1+1 \) -gravity center \
                  -geometry +0+0 -compose src-in -composite f-"$IMAGEN"
           else
                echo "$1 : parámetro o nombre de fichero incorrecto. Use -h para ayuda"
           fi
        ;;
  esac
  shift
done


Lo he modificado poco despùés de postearlo por un error en el cálculo de tamaños del tipo de letra.

Acabo de descubrir que según la versión del imagemagick no le da lo mismo dónde le pongas el -geometry al -composite, así que he vuelto a corregirlo para poner el -gravity y el -geometry en un lugar más legible a la vista y menos problematico.
« Última Modificación: 10 sep 2007, 15:31 pm por redy »
Admiro a la gente que sabe contar historias solamente con sus fotos, porque en el fondo las fotos son como los chistes; si tienes que explicarlas es que no son buenas...


redy

  • Moderador
  • Bimilenari@
  • *****
  • Mensajes: 2897
  • Gnudista
    • Esteropes El Cíclope
Re: Bordes
« Respuesta #26 on: 13 sep 2007, 10:03 am »
Acabo de caer en la cuenta de que dado que ahora hay ciertos parámetros que tienen valores calculados si no hay valor por defecto, es posible que en una lista queramos dar un valor fijo a algún parámetro y luego volverlo a poner a su valor calculado asignándole un valor vacío "". A poco que bailemos algo corremos el peligro de que la condición del while

Cita
Código: [Seleccionar]
while [ ! -z "$1" ]; do

encuentre el parámetro vacío y finalice el bucle. Eso pasa por no hacer bien las cosas desde el principio, mucho mejor Hubiera sido comprobar si quedan más parámetros en lugar de comprobar si el primer parámetro está vacío

Código: [Seleccionar]
while [ $# -gt 0 ]; do

Todo junto quedaría tal que así:

Código: [Seleccionar]
#! /bin/bash
#  Versión 1.2 (La casiredefinitiva)

# Valores por defecto
TIT="http://www.fotolibre.net"
TIT1=""
TIT2=""
COPY="$(date +%Y) Redy Rodriguez"
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 -Aperture -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 [ $# -gt 0 ]; 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
        ;;

        "--ptitulo2"|"-p2")
           shift
           if [ "$(( $1 ))"  -gt 0 -a "$(( $1 ))"  -le 6  ]; then
              POS2=${POSICIONES[$1]}
           fi
        ;;

        "--pcopy"|"-q")
           shift
           if [ "$(( $1 ))"  -gt 0 -a "$(( $1 ))"  -le 6  ]; then
              POSCOPY=${POSICIONES[$1]}
           fi
        ;;


        "--pcopy"|"-q")
           shift
           if [ "$(( $1 ))"  -gt 0 -a "$(( $1 ))"  -le 6  ]; then
              POSCOPY=${POSICIONES[$1]}
           fi
        ;;


        *)
           if [ -f "$PARAM" ]; then
               IMAGEN="$PARAM"
               OUT="$(dirname "$PARAM")/f-$(basename "$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 ))"
                  if [ "$INCR" -lt 36 ]; then INCR=36; fi
               else
                  INCR=$tamanomarco
               fi

               TAMANOMARCO="$((imageX + INCR * 2 ))x$((imageY + INCR * 2))!"
               if !(( DTAMANO >= 1 )); then
                   TAMANO="$(( INCR * 3 / 5 ))"
               else
                   TAMANO="$DTAMANO"
               fi
               if !(( DTAMANO1 >= 1 )); then
                   TAMANO1="$(( INCR * 3 / 5 ))"
               else
                   TAMANO1="$DTAMANO1"
               fi
               if !(( DTAMANO2 >= 1 )); then
                   TAMANO2="$(( INCR * 3 / 5 ))"
               else
                   TAMANO2="$DTAMANO2"
               fi

               MTIT=$(macrotit "$TIT" "$IMAGEN")
               MTIT1=$(macrotit "$TIT1" "$IMAGEN")
               MTIT2=$(macrotit "$TIT2" "$IMAGEN")

               # echo "$IMAGEN -> $MTIT - $MTIT1 -$MTIT2 - $COPY - $FONT - $TAMANO - $INCR - $TAMANOMARCO"
               echo "Poniendo marco a -> $IMAGEN"

               convert \( "$IMAGEN" -resize "$TAMANOMARCO"\
                  -fill black -colorize 60%\
                  -fill "#ffa200" -font "$FONT"  -pointsize "$TAMANO"\
                  -draw "gravity "$POS" text 5,2 '$MTIT'" \
                  -fill "#ffa200" -font "$FONT1"  -pointsize "$TAMANO1"\
                  -draw "gravity "$POS1" text 5,2 '$MTIT1'" \
                  -fill "#ffa200" -font "$FONT2"  -pointsize "$TAMANO2"\
                  -draw "gravity "$POS2" text 5,2 '$MTIT2'" \
                  \( -background none -fill "#ffa200" -pointsize "$(( TAMANO * 100 / 75 ))" \
                       -font "$CCFONT" label:"$ICONOS" \
                       -font "$FONT" -pointsize "$TAMANO" label:"$COPY" +append \) \
                       -gravity "$POSCOPY" -geometry +5+2 -composite \) \
                  \( "$IMAGEN"  -mattecolor "#ffa200" -frame 2x2+1+1 \) -gravity center \
                  -geometry +0+0 -compose src-in -composite "$OUT"
           else
                echo "$1 : parámetro o nombre de fichero incorrecto. Use -h para ayuda"
           fi
        ;;
  esac
  shift
done


Modificaciones 17/10/07

  Cuando se le pasaba un fichero con el nombre de ruta ponía la f- del fichero de salida al principio del nombre de ruta. Ahora separ con dirname y basename y pongo la f- justo antes del nombre del fichero.

  Errata en varios tests dónde decía [ -z result ] debiera decir [ -z "$result" ] (eso te pasa por abusar del copy&paste redy)

  El tag para capturar la apertura de diaframa con exiftool es -Aperture y no -AFAperture como ponía antes.

  No recuerdo si he corregido algo más... y lo que quedará por corregir.
« Última Modificación: 17 oct 2007, 19:30 pm por redy »
Admiro a la gente que sabe contar historias solamente con sus fotos, porque en el fondo las fotos son como los chistes; si tienes que explicarlas es que no son buenas...


redy

  • Moderador
  • Bimilenari@
  • *****
  • Mensajes: 2897
  • Gnudista
    • Esteropes El Cíclope
Re: Bordes
« Respuesta #27 on: 17 oct 2007, 19:20 pm »
Script para hacer un marco estilo Invi con imagemagick. Creo que no tiene muchas erratas.

Agradecimientos a Hombre Invisible que creo que fué el primero en usar este tipo de marco en fotolibre, y a un tal Jesús J. Del Carpio que escribió un script para poner sombras con Imagemagick y del que partí para llegar al espagueti de abajo. :)

Haciendo este encontré varias erratas en el otro que tendré que arreglar. Quedar queda más o menos así:

Código: [Seleccionar]
ponmarco2 -t1 "Ada en el columpio"  -t2 "s:%s f:%a l:%L %d" -s2 11 ada-columpio.jpg


Y el código es éste:

Código: [Seleccionar]
#!/bin/bash

#
#       Pone un marco con sombra a las imágenes que le digamos
#
#   Basado en el script dropsh de Jesús J. Del Carpio
#   http://www.isgeek.net/files/dropsh
#
#

# Valores por defecto
TIT1="http://www.fotolibre.net"
TIT2="%d"
COPY="$(date +%Y) Redy Rodriguez"
FONT1="/usr/share/fonts/TTF/VeraBI.ttf"
FONT2="$FONT1"
FONT="$FONT1"
CCFONT="/usr/share/fonts/ttf/decoratives/cc-icons.ttf"
ICONOS='c,b,a'
ANCHO=""
DTAMANO1=""  # Los tamaños de fuente calculan luego como 3/5 del ancho
DTAMANO2=""
DTAMANO3=""
DMARCO=""    # Tamaño del marco por defecto
POS1="south"
POS2="southwest"
POSCOPY="southeast"
PREFIJO="s_"
_SOMBRA="8"
_BORDE="20"
COLOR="white"
TINTA="#101010"

# Array para traducir los valores numéricos 1-6 a las posiciones que
# hay que pasar a imagemagick con el parámetro gravity
POSICIONES=( "" 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 -Aperture -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 [ $# -gt 0 ]; 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.

   --titulo1|-t1    "Puede haber hasta 2 títulos (t1 y t2)"
   --titulo2|-t2    "t2 por defecto es la fecha de disparo"
           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|-m   "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"

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

   --ptitulo1|-p1   Posición para título1 (Por defecto 2)
   --ptitulo2|-p2   Posición para título2 (Por defecto 1)
   --pcopy|-q       Posición para copyright (Por defecto 3)

                Las posicioones posibles son:
                1 - izquierda     
                2 - centrado     
                3 - derecha       
               
   --borde|-b       Tamaño del borde
   --sombra|-h      Tamaño de la sombra
   --color|-c       Color del borde
   --tinta|-i       Color del texto
FINDETEXTO
           exit 0
        ;;
        "--titulo"|"-t")
           shift
           TIT="$1"
        ;;
        "--titulo1"|"-t1")
           shift
           TIT1="$1"
        ;;
        "--titulo2"|"-t2")
           shift
           TIT2="$1"
        ;;

        "--copyright"|"-m")
           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
        ;;

        "--borde"|"-b")
           shift
           DBORDE=$1
        ;;
        "--sombra"|"-h")
           shift
           DSOMBRA=$1
        ;;
        "--tinta"|"-i")
           shift
           TINTA=$1
        ;;
        "--color"|"-c")
           shift
           COLOR=$1
        ;;



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

        "--ptitulo2"|"-p2")
           shift
           if [ "$(( $1 ))"  -gt 0 -a "$(( $1 ))"  -le 3  ]; then
              POS2=${POSICIONES[$1]}
           fi
        ;;

        "--pcopy"|"-q")
           shift
           if [ "$(( $1 ))"  -gt 0 -a "$(( $1 ))"  -le 3  ]; then
              POSCOPY=${POSICIONES[$1]}
           fi
        ;;
        "--tamanomarco"|"-g")
           shift
           DMARCO=$1

        ;;

        *)
        if [ -f "$PARAM" ]; then
           IN="$PARAM"
           OUT="$(dirname "$PARAM")/${PREFIJO}$(basename "$PARAM")"
           imageSize="$(identify -format "%w %h" "$IN")"
           imageX="${imageSize%% *}"
           imageY="${imageSize##* }"
           if [ $imageX -gt $imageY ]; then MAXsize=imageX; else MAXsize=imageY; fi

           if !(( DMARCO >= 1 )); then
               MARCO="$(( MAXsize/25+1 ))"
           else
               MARCO="$DMARCO"
           fi
           
           if (( DBORDE >= 1 )); then
               BORDE=$DBORDE         
           else
               BORDE=$_BORDE
           fi

           if (( DSOMBRA >= 1 )); then
               SOMBRA=$DSOMBRA         
           else
               SOMBRA=$_SOMBRA
           fi

           if (( DTAMANO >= 1 )); then
               TAMANO=$DTAMANO         
           else
               TAMANO="$((MARCO/3+1))"
           fi
           if (( DTAMANO1 >= 1 )); then
               TAMANO1=$DTAMANO1         
           else
               TAMANO1="$((MARCO/2+1))"
           fi

           if (( DTAMANO2 >= 1 )); then
               TAMANO2=$DTAMANO2         
           else
               TAMANO2="$((MARCO/3+1))"
           fi
           
           MTIT1=$(macrotit "$TIT1" "$IN")
           MTIT2=$(macrotit "$TIT2" "$IN")
           
           echo "Poniendo marco a $IN -> $OUT"

           convert \
              "$IN" -modulate 80 +contrast +contrast +contrast\
              -colorspace gray \
              -channel RGBA \
              -bordercolor "$COLOR" \
              -border "$(( SOMBRA*2 ))x$(( SOMBRA*2 ))" \
              -blur "0x$((SOMBRA/5+5))" \
              -shave "${SOMBRA}x${SOMBRA}" \
              -gravity northwest \
              "$IN" -colorspace RGB -compose src-in -composite \
              -bordercolor white -border "${BORDE}x${BORDE}" \
              -gravity southeast \
              -crop "+$(( SOMBRA*2 ))+$(( SOMBRA*2 ))" \
              -size 1x$MARCO xc:"$COLOR" -append \
               \( -background "$COLOR" -size 0x0 -fill "$TINTA" -pointsize \
                  "$(( TAMANO * 100 / 75 ))" \
                  -font "$CCFONT" label:"$ICONOS" \
                  -font "$FONT" -pointsize "$TAMANO" \
                  label:"$COPY" +append \) \
                  -gravity "$POSCOPY" -geometry +$(( BORDE * (${#POSCOPY}!=5) ))+5 \
                  -composite -compose src-in \
               -fill "$TINTA" -font "$FONT1"  -pointsize "$TAMANO1" \
               -draw "gravity $POS1 text $(( BORDE * (${#POS1}!=5) )),5 '$MTIT1'" \
               -fill "$TINTA" -font "$FONT2"  -pointsize "$TAMANO2"\
               -draw "gravity $POS2 text $(( BORDE * (${#POS2}!=5) )),5 '$MTIT2'" \
              "$OUT"
        else
                echo "$1 : parámetro o nombre de fichero incorrecto. Use -h para ayuda"
        fi
        ;;
  esac
  shift
done


La ayuda
Código: [Seleccionar]
Uso:

  ./ponmarco2 --help|--usage|-h Muestra esta ayuda
  ./ponmarco2 [opciones] img-1 [... img-n]  [... [opciones] img-n1 [... img-nn]]

  opciones disponibles:

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

   --titulo1|-t1    "Puede haber hasta 2 títulos (t1 y t2)"
   --titulo2|-t2    "t2 por defecto es la fecha de disparo"
           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|-m   "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 mensaje
                    de copyright
   --font1|-f1      Fuente para el título1
   --font2|-f2      Fuente para el titulo2 (por defecto la misma que título1)
   --tamano|-s      Tamaño de la letra en puntos para copyright
   --tamano1|-s1    Tamaño de letra para título1 (por defecto = título)
   --tamano2|-s2    Tamaño de letra para título2 (por defecto = título)

   --ptitulo1|-p1   Posición para título1 (Por defecto 2)
   --ptitulo2|-p2   Posición para título2 (Por defecto 1)
   --pcopy|-q       Posición para copyright (Por defecto 3)

                Las posicioones posibles son:
                1 - izquierda     
                2 - centrado     
                3 - derecha       
               
   --borde|-b       Tamaño del borde
   --sombra|-h      Tamaño de la sombra
   --color|-c       Color del borde
   --tinta|-i       Color del texto

« Última Modificación: 25 oct 2007, 13:15 pm por redy »
Admiro a la gente que sabe contar historias solamente con sus fotos, porque en el fondo las fotos son como los chistes; si tienes que explicarlas es que no son buenas...


invisible

  • Moderador
  • Palizas oficial
  • *****
  • Mensajes: 8097
    • INVItARTE
Re: Bordes
« Respuesta #28 on: 17 oct 2007, 19:54 pm »
Pues de nada, redy, por la parte que me toca... aunque si hay que agradecer a alguien, es a ti, porque esto si que es curro del bueno. Habrá que ponerlo en práctica.  ;)
Por cierto, muy buen retrato; al final estamos asistiendo (virtualmente) al crecimiento de tu hija.  @)
« Última Modificación: 17 oct 2007, 19:57 pm por hombre_invisible »
"Si quieres ver lo invisible, observa con atención lo visible."
                                                     Manuel Álvarez Bravo (1902-2002)

Colegota

  • Palizas oficial
  • *
  • Mensajes: 8188
  • ¡Me faltan carretes!
    • ¡Me faltan carretes!
Re: Bordes
« Respuesta #29 on: 17 oct 2007, 20:50 pm »
Buenas,

¡este tío es un hacha!  q:)

Por si te apetece enredar...  :)o Bueno, yo estaba pensando en eso mismo pero mezclado con el anterior. Es decir, lo que ahora es el fondo blanco que tuviera como base la imagen. Pero no puede ser oscuro o no se notaría la sombra. Tal vez en claro y con algún difuminado tipo blur o imitando a cristal esmerilado. Puede que la sombra hubiera que hacerla más oscura, ver como encajaba el color de las letras... eso sí, mantendría el filete alrededor de la principal.

Todo esto son devaneos por si te quieres poner a ello. De todas formas si no lo intentaría yo cuando tuviese tiempo... o sea, que nada de prisas.  ;-)

Por cierto, muy buen retrato; al final estamos asistiendo (virtualmente) al crecimiento de tu hija.  @)

Sip, sigo diciendo que el subforo de retratos está muy triste. Y estas fotos merecen estar ahí.

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