[Comunidad FotoLibre]

Ayuda => Pide ayuda aquí => Mensaje iniciado por: Colegota en 21 nov 2005, 17:23 pm

Título: Bordes
Publicado por: Colegota en 21 nov 2005, 17:23 pm
Buenas,

vale, sí, el título es para llamar la atención.  ::)

En realidad quería hablar de "marcos", pero como los pikinglis les llaman "border", en algunos sitios los están traduciendo tal cual.

Se trata de que mis amigos viajeros de MapaMundi se están poniendo las pilas con el tema de las fotos (http://comunidad.mapamundi.info/index.php/board,20.0.html) y me preguntan por cómo hacer los marcos que ponemos nosotros. Así que creo que se empiezan a imponer unos "comos" de ImageMagick.

Si no hay más voluntarios me pongo yo, pero va a ser más lento porque estoy tan liado como siempre. Además hay por aquí a quien se le dan muy bien los cursos y controla bastante el tema.

Luego, cada uno podemos aportar nuestros scripts particulares como ejemplos de uso.

¿Alguien se anima? (http://comunidad.fotolibre.net/index.php/board,11.0.html)
En caso afirmativo creo que se debería mover el foro de ImageMagick a la Escuela ¿no? Uno de estos días voy a hacer limpieza de foros. Se admiten sugerencias.

Saludos,
Colegota
Título: Re: Bordes
Publicado por: Colegota en 11 jul 2007, 11:41 am
Buenas,

una petición de Quo Vadis (http://comunidad.fotolibre.net/index.php/topic,1166.msg7578.html#msg7578) me ha recordado que en su día me comprometí a desgranar un cómo para scripts con ImageMagick.

Mientras encuentro un rato para detallar el funcionamiento os dejo el código por si alguien quiere usarlo tal cual o adaptárselo.

Se necesita tener instalado ImageMagick (http://www.imagemagick.org/index.php). Aunque la página está en Inglés, tiene abundantes ejemplos y los manuales son muy detallados y con bastantes ejemplos. Es multi-plataforma, aunque los ejemplos que muestro aquí son para GNU/Linux, adaptar los scripts a otro sistema no necesitan más cambio que el de la forma de identificar los parámetros y poco más.

Para usarlo hay que desplazarse al directorio o carpeta donde tenemos las imágenes y teclear (habiendo hecho el script ejecutable):

Código: [Seleccionar]
$ (path al script)/enmarca xx "(Lugar)"
xx sería el comienzo de los nombres de archivos a enmarcar. Por ejemplo, si las fotos se llaman img_nnnn.jpg, con

Código: [Seleccionar]
[colegota@alforjas fotos]$ /home/colegota/talleres/enmarca img "Mi pueblo"
Le pondría el texto "Mi pueblo" (sin las comillas) a todas las fotos que comiencen con "img" con extensión ".jpg" en nuevos ficheros cuyo nombre comienza ahora por "f-" (ej. f-img_1234.jpg" no modificando las originales. Se crean dos imágenes temporales 0marco.jpg y 0final.jpg que pueden ser eliminadas posteriormente o modificar el script para que lo haga.

El texto del script de nombre enmarca sería este:

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

  echo $IMAGEN

  cp $IMAGEN f-$IMAGEN

  IMAGEN=f-$IMAGEN

  convert $IMAGEN -resize 104%x106% 0marco.jpg

  mogrify -fill black -colorize 60% 0marco.jpg

  mogrify -mattecolor "#ffa200" -frame 2x2+1+1 $IMAGEN

  composite -gravity center $IMAGEN 0marco.jpg 0final.jpg

  convert 0final.jpg\
-fill "#ffa200" -font /usr/share/fonts/ttf/vera/VeraBI.ttf -draw "gravity southwest text 5,2 '$2'"\
-fill "#ffa200" -draw "gravity southeast text 5,2 'http://mapamundi.info/licenciaCCbysa'"\
$IMAGEN

done

Continuará...

Saludos,
Colegota
Título: Re: Bordes
Publicado por: redy en 13 jul 2007, 10:31 am
Así que creo que se empiezan a imponer unos "comos" de ImageMagick.

¿De imagemagick o de bash-scripting orientado a imagemagick?

Si es de lo segundo me gustaría darte un par de consejos para mejorar tu script:

Cuando metas nombres de ficheros en una variable refiérete a ella siempre entrecomillándola correctamente, usa "$IMAGEN" en lugar de $IMAGEN para evitar que nombres de ficheros con espacios sean expandidos a dos palabras.

Cuando uses jpg (algoritmo de compresión con pérdida), procura hacer todo lo posible en un solo paso, la mayorái de los comandos de imagemagick se pueden concatenar, si hacemos un paso, guardamos el jpg, hacemos otro, volvemos a guardar... acabamos teniendo una gran pérdida de información.

Un saludo.
Título: Re: Bordes
Publicado por: Colegota en 13 jul 2007, 13:25 pm
Buenas,

Así que creo que se empiezan a imponer unos "comos" de ImageMagick.

¿De imagemagick o de bash-scripting orientado a imagemagick?

De todo.  :)o
Bueno, cuando escribí esa frase estaba pensando "en general" (o no pensando). Pero me refería más bien a usar ImageMagick desde la línea de comandos que a usar el GUI. Y eso inevitablemente lleva a los scripts. Pero vamos, ya sabes que puedes escribir cursos y comos de lo que quieras. :)

Si es de lo segundo me gustaría darte un par de consejos para mejorar tu script:

Dos y los que hagan falta. Seguro que además de mi, hay más gente que te lo agradece. Aparte, como ya he comentado en ocasiones, yo estoy bastante oxidadillo y vago en lo que a programación se refiere y apenas me preocupo de que las cosas funcionen y sean sencillas. De cara a posibles reutilizaciones también procuro tener en cuenta que la gente que vaya a utilizarlo lo vea sencillo y no necesite saber programar o saber un poco. Pero eso no está reñido ni con la eficacia ni con hacer bien las cosas. Digamos que me puse a hacerlo y no me rompì demasiado el coco así que cualquier ayuda es bienvenida.

Cuando metas nombres de ficheros en una variable refiérete a ella siempre entrecomillándola correctamente, usa "$IMAGEN" en lugar de $IMAGEN para evitar que nombres de ficheros con espacios sean expandidos a dos palabras.

Cierto, y eso sí que debería haberlo tenido en cuenta. Lo que pasa es que como yo no suelo usar nombres así tampoco había tenido problemas. Si los hay con los textos a incluir en el segundo argumento y por eso el comillado (esta vez simple al estar dentro de un doble) al poner los textos.

Cuando uses jpg (algoritmo de compresión con pérdida), procura hacer todo lo posible en un solo paso, la mayorái de los comandos de imagemagick se pueden concatenar, si hacemos un paso, guardamos el jpg, hacemos otro, volvemos a guardar... acabamos teniendo una gran pérdida de información.

Aquí tienes más razón aún. Es más, al repasarlo he visto que reorganizando podía poner el texto directamente sobre el fondo en lugar de la resultante y evitando la necesidad de dos imágenes temporales.

Para crear el fondo que será el marco no me preocupa tanto la pérdida de calidad por lo que el tener varias operaciones sobre la imagen 0marco.jpg daría lo mismo.
Pero puestos a hacer las cosas bien, he visto que se pueden poner varias de las operaciones en un solo convert que combina la primera serie de modificaciones.
¿Se te ocurre como reducirlo más? ¿Se pueden encadenar comandos por "pipe"? Creo que aquí no valdría, pero así como con el convert y el mogify se puede hacer en una orden, tal vez el resultado de un convert o mogrify pudiera valer para entrada de un composite... :? Por ejemplo los dos últimos.

Bueno, todo lo que se te ocurra es bienvenido.  :-)
Os dejo el código actual a falta de que pueda ser mejorado. Para los que aún no controláis los comandos, los explicamos cuando tengamos la versión final.

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

  echo "$IMAGEN"

  cp "$IMAGEN" f-"$IMAGEN"

  IMAGEN=f-"$IMAGEN"

  convert "$IMAGEN" -resize 104%x106%\
-fill black -colorize 60%\
-fill "#ffa200" -font /usr/share/fonts/TTF/VeraBI.ttf -pointsize 24 -draw "gravity southwest text 5,2 '$2'"\
-fill "#ffa200" -draw "gravity southeast text 5,2 'http://mapamundi.info/licenciaCCbysa'"\
0marco.jpg

  mogrify -mattecolor "#ffa200" -frame 2x2+1+1 "$IMAGEN"

  composite -gravity center $IMAGEN 0marco.jpg "$IMAGEN"

done

Saludos,
Colegota
Título: Re: Bordes
Publicado por: redy en 13 jul 2007, 20:08 pm
¿Se te ocurre como reducirlo más? ¿Se pueden encadenar comandos por "pipe"?

Puede pero no es necesario. El convert y el mogrify son practicamente iguales con la salvedad de que el mogrify modifica la imagen y el convert crea una nueva. El composite permite combinar dos imágenes pero eso también se puede hacer con el convert con la opción -composite

Código: [Seleccionar]
convert imagen-base imagen-mascara -compose metodo -composite imagen destino

Donde pongo imagen-base e imagen-mascara no tienen porque ser las imágenes tal cual, les puedo dar el tratamiento que me interese. Se pueden usar paréntesis para establecer prioridades o para que quede más claro, pero hay que tener la precaución de ponerles un \ para que el bash no los interprete como parte del comando. Se me ocurre, sin modificar demasiado tu script, hacerlo todo en un solo paso de la siguiente forma:

Código: [Seleccionar]
for IMAGEN in $1*.jpg;
do

  echo "$IMAGEN"

  convert \( "$IMAGEN" -resize 104%x106%\
         -fill black -colorize 60%\
         -fill "#ffa200" -font /usr/share/fonts/TTF/VeraBI.ttf -pointsize 24 -draw "gravity southwest text 5,2 '$2'"\
         -fill "#ffa200" -draw "gravity southeast text 5,2 'http://mapamundi.info/licenciaCCbysa'" \)\
         \( $IMAGEN  -mattecolor "#ffa200" -frame 2x2+1+1 "$IMAGEN" -gravity center \) \
         -compose src-in -composite f-"$IMAGEN"

done


Otra cosa que haría es cambiar la forma de pasar los parámetros. Yo usaría algo como
Código: [Seleccionar]
enmarca [--tit "Titulo de la foto"] [--font "Fuente"] [--copyright "Texto del copyright"] Img-1 [ ... Img-n]

Añadiendo un poquito de código extra  al principio para interpretar y descartar con shift los parámetros pasados (a excepción de los ficheros) y sustituyendo el 'for i in $1*' por un 'for i in $*' pero igual es complicarse mucho para empezar ¿no? se supone que los que nos siguen no dominan el bash...
Título: Re: Bordes
Publicado por: Colegota en 13 jul 2007, 20:52 pm
Buenas,

fale, es que al principio no sabía si te referías a encadenar comandos u opciones.

El script es un buen intento :) pero no me hace lo que quería. Hay un despiste en el último paréntesis que debería ir en

Código: [Seleccionar]
         \( $IMAGEN  -mattecolor "#ffa200" -frame 2x2+1+1\) "$IMAGEN" -gravity center  \
aunque supongo que es un despiste de tecleo. Pero lo importante es que no me puedo quitar (creo) la 0marco.jpg porque en realidad lo que hace mi script es hacer esa imagen más grande para que al poner la original (con el filete dorado) encima, lo que sobra de la grande haga de marco. Tal vez debiera haber explicado el script antes de empezar...  :)o

Con el script que has puesto he conseguido o que se vea la imagen doble corrigiendo lo del paréntesis, o que se vea (creo) la original solo quitando el -composite. Pero al menos a estas horas de la noche no acierto a ver por qué.  :sonroja2:

Respecto a los parámetros, pues mucho mejor, claro. Lo que pasa es que yo soy el primero que uso el bash con cuatro cosas y tendría que repasar para hacerlo chachi. De hecho soy tan vago que tengo diferentes copias con los textos o comandos modificados. ;)
Los que nos siguen, pues creo que hay dos tipos. Los que lo único que quieren es un script para que le haga el marco, y los que quieran enredar un poco con él.
Para los primeros, lo mejor es lo que propones. Para los segundos, pues creo que mejor que sea sencillo para poder enredar un poco combinando con el manual y los ejemplos de ImageMagick y con esos presuntos comos que yo iba a hacer...  :sonroja2:

Saludos,
Colegota
Título: Re: Bordes
Publicado por: redy en 14 jul 2007, 13:28 pm
Código: [Seleccionar]
El script es un buen intento :) pero no me hace lo que quería. Hay un despiste en el último paréntesis que debería ir en
Código: [Seleccionar]
   \( $IMAGEN  -mattecolor "#ffa200" -frame 2x2+1+1\) "$IMAGEN" -gravity center  \

Si hay un despiste, pese al cual, y extrañamente en mi versión de imagemagic funcionaba. Sobra el segundo $IMAGEN. El -gravity center fuera de los paréntesis está mejor, pero dentro también valdría, por cierto al primer $IMAGEN también le faltan las comillas.

Cita

aunque supongo que es un despiste de tecleo. Pero lo importante es que no me puedo quitar (creo) la 0marco.jpg porque en realidad lo que hace mi script es hacer esa imagen más grande para que al poner la original (con el filete dorado) encima, lo que sobra de la grande haga de marco. Tal vez debiera haber explicado el script antes de empezar...  :)o

No, si está perfectamente explicado y eso mismo era lo que yo pretendía

Cita
Respecto a los parámetros, pues mucho mejor, claro. Lo que pasa es que yo soy el primero que uso el bash con cuatro cosas y tendría que repasar para hacerlo chachi. De hecho soy tan vago que tengo diferentes copias con los textos o comandos modificados. ;)

Pues venga, lo pongo corregido y completillo (Probado con ImageMagick 6.2.9 y 6.3.2):

Código: [Seleccionar]
#! /bin/bash
TIT="Prueba de título"
COPY="http://mapamundi.info/licenciaCCbysa"
FONT="/usr/share/fonts/TTF/VeraBI.ttf"
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 ""
           exit 0
        ;;
        "--titulo"|"-t")
           shift
           TIT="$1"
        ;;

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

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

        "--tamano"|"-s")
           shift
           TAMANO=$1
        ;;
        *)
           if [ -f "$PARAM" ]; then
              IMAGEN="$PARAM"
              echo "$IMAGEN -> $TIT - $COPY - $FONT - $TAMANO"

               convert \( "$IMAGEN" -resize 104%x106%\
                  -fill black -colorize 60%\
                  -fill "#ffa200" -font "$FONT"  -pointsize "$TAMANO"\
                  -draw "gravity southwest text 5,2 '$TIT'"\
                  -fill "#ffa200" -draw "gravity southeast text 5,2 '$COPY'" \)\
                  \( "$IMAGEN"  -mattecolor "#ffa200" -frame 2x2+1+1 \) -gravity center \
                  -compose src-in -composite f-"$IMAGEN"
           fi
        ;;
  esac
  shift
done


¿Como se usa? Pues ejecutando el script con el parámetro --help --usage o -h te lo explica, pero así a grandes rasgos le podemos pasar simplemente una lista de fotos o una sola foto y si queremos antes de la foto o fotos que queramos podemos poner opciones como:  -t "título" -c "Mensaje de copyright" -f "fuente" -s "Tamaño". Las opciones tendrán validez en todas las fotos que pongamos a continuación. Quiero decir que si queremos por ejemplo poner el título "Paisaje nevado" a tres fotos y el título "Nocturno" a otras dos podemos poner:

Código: [Seleccionar]
./enmarca -t "Paisaje nevado" foto1.jpg foto2.jpg foto3.jpg -t Nocturno fotonocturna1.jpg fotonocturna2.jpg

Si alguien prefiere teclear más puede usar las opciones largas --título --copyright --font --tamano en lugar de -t -c -f y -s


Un ejemplo de como queda es:
Código: [Seleccionar]
./enmarca -c "http://creativecommons.org/licenses/by-sa/2.1/es/" -t "Ada jugando con una pompa" -f /usr/share/fonts/TTF/luximbi.ttf -s 18 ada*.jpg
(http://www.fotolibre.org/albums/userpics/10007/normal_f-ada-pompa3.jpg) (http://www.fotolibre.org/albums/userpics/10007/f-ada-pompa3.jpg)(http://www.fotolibre.org/albums/userpics/10007/thumb_ada-pompa2.jpg) (http://www.fotolibre.org/albums/userpics/10007/ada-pompa2.jpg)
(Foto original)


Título: Re: Bordes
Publicado por: gecko en 14 jul 2007, 16:25 pm
Me parece muy interesante lo de tener un script para hacer bordes, pero, os estoy leyendo y no me entero de mucho. :girl_sad:

Se agradece un manual para torpes. Yo he llegado a que ImageMagick es un programa para trabajar con imagenes (fotos) en consola, pero ¿dónde se coloca el script? ¿en la carpeta de ImageMagick de /usr/share?

Título: Re: Bordes
Publicado por: redy en 15 jul 2007, 08:38 am
Me parece muy interesante lo de tener un script para hacer bordes, pero, os estoy leyendo y no me entero de mucho. :girl_sad:

Se agradece un manual para torpes. Yo he llegado a que ImageMagick es un programa para trabajar con imagenes (fotos) en consola,

Exacto, ImageMagick es un programa que nos permite hacer muchísimas cosas desde consola, o desde cualquier lenguage de programación, perl, bash, python, c... 

Para usarlo desde consola tiene unos cuantos programas:

identify: Nos muestra información sobre una imágen.

convert: Básicamente transforma una imágen en otra, puede sur usasdo simplemente para convertir de un formato a otro, o para aplicar transformaciones y efectos a la imágen

mogrify: Mogrify permite aplicar transformaciones y efectos a una imágen, pero a diferencia de convert que siempre genera una imágen nueva sin tocar la original, mogrify trabaja sobre la imágen original modificándola. No vale por tanto para transformar de un formato a otro.

composite: Compone varias imágenes como si las superpusieras en capas (igual que las capas de gimp).

montage: junta varias imágenes como si fueran un puzzle, puedes ponerles bordes y otros efectos.

Luego están, aunque se usan menos:

compare: nos muestra las diferencias entre imágenes.

import: captura la imágen de una ventana.

conjure: Cualquiera de los comandos anteriores puede ser muy simple o muy complejo, pero para cosas realmente complejas, conjure es el intérprete de un lenguaje llamado MSL (Magick Scripting Language).

Y finalmente si queremos usar imagemagick desde un interfaz gráfico, o simplemente mostrar una imágen en una ventana tenemos display.

Para un vistazo más detallado a las posibilidades de cada uno de los comandos comando sugiero ejecutar:

Código: [Seleccionar]
«comando» -help

Cita
pero ¿dónde se coloca el script? ¿en la carpeta de ImageMagick de /usr/share?

En este caso lo que hicimos fué un script de bash, que es el lenguage en el que sueles introducir los comandos cuando escribes en una consola de linux. El script lo puedes poner dónde quieras. Si lo pones en la misma carpeta que tienes las imágenes, lo puedes ejecutar escribiendo

Código: [Seleccionar]
bash «nombre_del_script» parámetros ....

Si le modificas los permisos al script permitiéndo la ejecución, y la primera línea  del script es:
Código: [Seleccionar]
#! /bin/bash
Ya no es necesario que le pongas el bash delante, pero tendrás que poner el path completo de dónde está para ejecutarlo, por ejemplo
Código: [Seleccionar]
/home/redy/pruebas/«nombre_del_script» parámetros ....
O si está en el mismo directorio en el que estás trabajando simplemente:
Código: [Seleccionar]
./«nombre_del_script» parámetros ....

Si lo queremos hacer más sencillo todavía solo tienes que poner el script en una carpeta que esté en el path. El path es una lista de carpetas en las que se buscan programas para ejecutarlos. La puedes ver si das el comando
Código: [Seleccionar]
echo "$PATH" | tr : '\n'

Si pones tu script en cualquiera de esas carpetas, para ejecutarlo solo hace falta que pongas:
Código: [Seleccionar]
«nombre_del_script» parámetros ....

Generalmente en nuestro path tenemos /home/«usuario»/bin ese es un buen sitio para poner nuestros scripts, teniendo en cuenta que solo funcionarán cuando estemos con nuestro usuario, si queremos que funcionen para todos los usuarios del sistema los podemos poner en /usr/bin pero para eso tenemos que ser root.
Título: Re: Bordes
Publicado por: Colegota en 15 jul 2007, 17:11 pm
Buenas,

fale, este ya casi funciona.  :P No es por fastidiar, es broma. Lo que pasa es que faltan unas comillas dobles al final de esta línea:

Código: [Seleccionar]
           echo "  $0 [opciones] img-1 [... img-n]  [... [opciones] img-n1 [... img-nn]]
en la versión anterior me imagino que el problema era el $IMAGE repetido. Yo creí que era deliberado por eso no lo quité.
Pero ahora sí que me funciona.  :-) Y por supuesto está mucho más avanzado que el original.  :)o

Con lo de explicarlo me refería a detallar cada comando para que se vea lo que va haciendo paso a paso. Hoy ando un poco vago pero si puedo mañana subo unos ejemplos y lo cuento. Digamos que lo mismo que explica Redy, pero con ejemplos. Más que nada por si alguien se lo quiere presonalizar.

Bueno, os dejo el script completo con lo de las comillas modificado para que no haya dudas. Redy, casi actualiza también el tuyo por si alguien no sigue leyendo. :)

Código: [Seleccionar]
#! /bin/bash
TIT="Prueba de título"
COPY="http://mapamundi.info/licenciaCCbysa"
FONT="/usr/share/fonts/TTF/VeraBI.ttf"
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 ""
           exit 0
        ;;
        "--titulo"|"-t")
           shift
           TIT="$1"
        ;;

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

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

        "--tamano"|"-s")
           shift
           TAMANO=$1
        ;;
        *)
           if [ -f "$PARAM" ]; then
              IMAGEN="$PARAM"
              echo "$IMAGEN -> $TIT - $COPY - $FONT - $TAMANO"

               convert \( "$IMAGEN" -resize 104%x106%\
                  -fill black -colorize 60%\
                  -fill "#ffa200" -font "$FONT"  -pointsize "$TAMANO"\
                  -draw "gravity southwest text 5,2 '$TIT'"\
                  -fill "#ffa200" -draw "gravity southeast text 5,2 '$COPY'" \)\
                  \( "$IMAGEN"  -mattecolor "#ffa200" -frame 2x2+1+1 \) -gravity center \
                  -compose src-in -composite f-"$IMAGEN"
           fi
        ;;
  esac
  shift
done

Saludos,
Colegota
Título: Re: Bordes
Publicado por: redy en 15 jul 2007, 19:13 pm
fale, este ya casi funciona.  :P No es por fastidiar, es broma. Lo que pasa es que faltan unas comillas dobles al final de esta línea:

Código: [Seleccionar]
           echo "  $0 [opciones] img-1 [... img-n]  [... [opciones] img-n1 [... img-nn]]

Pues si, buena corrección. Como dice la frase: '¡Hombre! Un falo lo tiene cualquiera...'  :)  O:-)
Título: Re: Bordes
Publicado por: redy en 16 jul 2007, 04:32 am
Es multi-plataforma, aunque los ejemplos que muestro aquí son para GNU/Linux, adaptar los scripts a otro sistema no necesitan más cambio que el de la forma de identificar los parámetros y poco más.

Bueno, si la otra plataforma es windows creo que lo mejor es instalar cygwin (http://www.cygwin.com/), con lo que tendras el bash, el propio imagemagick y todas las utilides que solemos usar en linux, y así podras usar los scripts que ponemos aquí sin ninguna modificación. Y para la gente que usa mac creo que hay algo similar llamado fink (http://www.finkproject.org/index.php?phpLang=en).

Título: Re: Bordes
Publicado por: Colegota en 16 jul 2007, 12:22 pm
Buenas,

Bueno, si la otra plataforma es windows creo que lo mejor es instalar cygwin (http://www.cygwin.com/), con lo que tendras el bash, el propio imagemagick y todas las utilides que solemos usar en linux, y así podras usar los scripts que ponemos aquí sin ninguna modificación...

la verdad es que hasta ahora no me había molestado en mirar en qué consistía el cygwin. Creía que era una especie de opuesto al Wine y no tenía idea de que viniese con tantos paquetes ya instalados (http://www.cygwin.com/packages/).
Por si alguien le interesa, en la Wikipedia hay más información sobre Cygwin (http://es.wikipedia.org/wiki/Cygwin) en la lengua de Cervantes.

Saludos,
Colegota
Título: Re: Bordes
Publicado por: redy en 11 ago 2007, 00:09 am
Hoy intenté probarlo con una foto panorámica y la verdad es que lo de  -resize 104%x106% no le sienta nada bien. A mi me gusta que el marco sea igual de ancho por todos los lados independientemente del tamaño horizontal o vertical de la imagen. Finalmente decidí añadir un parámetro más para pasarle el ancho del marco en pixels, y si no se pasa o se establece a valor nulo ("")  que lo autocalcule.

Para autocalcularlo hago una división entera por 33 la mayor de las dos dimensiones de la imagen, lo cual viene a ser un 3% por cada lado. Y pongo un límite mínimo de 28 pixels. Vamos, que si el 3% del lado más largo es menor que 28 lo pongo a 28.

Código: [Seleccionar]
#! /bin/bash
TIT="(C) Redy Rodríguez"
COPY="http://creativecommons.org/licenses/by-sa/2.5/es"
FONT="/usr/share/fonts/TTF/VeraBI.ttf"
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 Tamaño del marco en pixels"
           echo ""
           exit 0
        ;;
        "--titulo"|"-t")
           shift
           TIT="$1"
        ;;

        "--copyright"|"-c")
           shift
           COPY=$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))"
                  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'"\
                  -fill "#ffa200" -draw "gravity southeast text 5,2 '$COPY'" \)\
                  \( "$IMAGEN"  -mattecolor "#ffa200" -frame 2x2+1+1 \) -gravity center \
                  -compose src-in -composite f-"$IMAGEN"
           fi
        ;;
  esac
  shift
done


A mi me gusta así. Al que no le guste que lo modifique a su antojo....
Título: Re: Bordes
Publicado por: Colegota en 11 ago 2007, 07:11 am
Buenas,

Hoy intenté probarlo con una foto panorámica y la verdad es que lo de  -resize 104%x106% no le sienta nada bien. A mi me gusta que el marco sea igual de ancho por todos los lados independientemente del tamaño horizontal o vertical de la imagen.

al final no se si lo había comentado o pensaba hacerlo cuando hiciese el famoso y prometido "ImageMagick de andar por casa". El caso es que a mi también me gusta que el marco sea igual por ambos lados. El -resize 104%x106% es lo que calculé "a lo bruto" para las imágenes que usaba cuando hice el script, que si no recuerdo mal eran entonces de 1024x768. Y vale mientras mantengas esas proporciones. En el momento que la foto es simplemente vertical, ya falla. Pero como todo, lo dejé para cuando tuviera tiempo...  :)o

Finalmente decidí añadir un parámetro más para pasarle el ancho del marco en pixels, y si no se pasa o se establece a valor nulo ("")  que lo autocalcule.
Para autocalcularlo hago una división entera por 33 la mayor de las dos dimensiones de la imagen, lo cual viene a ser un 3% por cada lado. Y pongo un límite mínimo de 28 pixels. Vamos, que si el 3% del lado más largo es menor que 28 lo pongo a 28.

Tiene buena pinta. Lo probaré en cuanto tenga un rato y te comento.
Ya puestos, si te aburres  :ejem: puedes experimentar con el tamaño del filetillo. El original está calculado para esas imágenes de 1024x768, pero cuando usas más grandes sale demasiado fino. Especialmente en el lado vertical.

A todo esto ¿vas a hacer lo del curso de bash? Lo digo porque yo sí que pensaba hacer el de explicar los comandos de ImageMagick aunque no puedo garantizar las fechas. Y tal vez fuese bueno "medio sincronizarlos" de forma que por ejemplo con las cosas que yo explicase tu hicieras algún script que le sacase partido.
Mañana y pasado quiero intentar terminar lo del curso para niños y luego podría ir poniéndome con ello... a la vez que otras cosas.  :?

Saludos,
Colegota
PD Estos días ando desconectadillo porque estoy quedando con los amigos y organizándome un poco las cosas por casa, pero a partir de mañana espero ya ponerme al día con los mensajes e incluso "volver a producir".  ;)
Título: Re: Bordes
Publicado por: redy en 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.
Título: Re: Bordes
Publicado por: redy en 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:

(http://www.fotolibre.org/albums/userpics/10007/normal_f-prueba-marco.jpg) (http://www.fotolibre.org/albums/userpics/10007/f-prueba-marco.jpg)
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

Título: Re: Bordes
Publicado por: invisible en 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:)
Título: Re: Bordes
Publicado por: Colegota en 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
Título: Re: Bordes
Publicado por: Colegota en 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
Título: Re: Bordes
Publicado por: redy en 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 (http://www.sno.phy.queensu.ca/~phil/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
Título: Re: Bordes
Publicado por: Colegota en 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
Título: Re: Bordes
Publicado por: redy en 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....
Título: Re: Bordes
Publicado por: invisible en 07 sep 2007, 09:34 am
 :-? Algún día, cuando esté más aburrido de lo que normalmente estoy, miraré estas cosillas...  :-?
Título: Re: Bordes
Publicado por: Colegota en 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
Título: Re: Bordes
Publicado por: redy en 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.
Título: Re: Bordes
Publicado por: redy en 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.
Título: Re: Bordes
Publicado por: redy en 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

(http://www.fotolibre.org/albums/userpics/10007/normal_s_ada-columpio.jpg) (http://www.fotolibre.org/albums/userpics/10007/s_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

Título: Re: Bordes
Publicado por: invisible en 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.  @)
Título: Re: Bordes
Publicado por: Colegota en 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
Título: Re: Bordes
Publicado por: elpecoso en 24 oct 2007, 17:33 pm
Maese Redy, me casca el siguiente error...

marco: 36: Syntax error: "(" unexpected

la linea 36 me sale:
POSICIONES=( "" southwest south southeast )


chau!
Título: Re: Bordes
Publicado por: redy en 25 oct 2007, 05:11 am
¿Que version de bash tienes?  echo $BASH_VERSION

Porque sólo se me ocurre que la asignación de arrays en la forma ARRAY=( Valor valor valor .... ) no funcione en tu versión porque es muy antigua. O que haya una comilla sin cerrar antes de esa línea que nos trastoque todo el invento.

Prueba a meter en una consola el comando

Código: [Seleccionar]
A=( 1 2 3 4 5 ); echo ${A[@]}
Si da error sustituye la línea 36 por algo como:
Código: [Seleccionar]
eval POSICIONES{[1]=southwest,[2]=south,[3]=southeast}
Si el comando anterior va bien. Busca si antes de esa línea hay unas comillas traspapeladas....
Título: Re: Bordes
Publicado por: elpecoso en 25 oct 2007, 10:38 am
muchas gracias Redy, lo estaba ejecutando mal... usaba el sh

he visto que si la foto es grande, el texto mal posicionado

chau!

Título: Re: Bordes
Publicado por: redy en 25 oct 2007, 13:17 pm
he visto que si la foto es grande, el texto mal posicionado

Lo he modificado. A ver ahora :?
Título: Re: Bordes
Publicado por: Colegota en 01 dic 2007, 22:22 pm
Buenas,

por cierto, Redy, ahora que los scripts ya parecen estables. Casi creo que sería bueno sacarlos a dos hilos separados, uno para el normal y otro para el de estilo "Invi". Es que hay que recorrerse dos o tres páginas de mensajes hasta dar con el adecuado.
Los que hemos seguido el hilo nos enteramos, pero los que vienen de nuevo es fácil que se pierdan.

Saludos,
Colegota
Título: Re: Bordes
Publicado por: redy en 02 dic 2007, 18:43 pm
por cierto, Redy, ahora que los scripts ya parecen estables.

Pues ahora que lo dices acabo de recordar que tenía pendiente arreglar el segundo que no sitúa bien los textos... A ver si tengo un rato y me pongo, y luego además los separo y los publico en mi página...


Título: Re: Bordes
Publicado por: Colegota en 03 ene 2008, 16:28 pm
Buenas,

por cierto, Redy, ahora que los scripts ya parecen estables.

Pues ahora que lo dices acabo de recordar que tenía pendiente arreglar el segundo que no sitúa bien los textos... A ver si tengo un rato y me pongo, y luego además los separo y los publico en mi página...

Cierto. Al no conseguir mi intento inicial (http://comunidad.fotolibre.net/index.php/topic,1783.0.html) estaba probando a adaptar este y me he encontrado con lo de los textos.

Por si te sirve, trato de hacer una versión en fondo negro. Lo digo por lo de usar la variable del color para todos los fondos. También intentaré ponerle el filetillo dorado y puede que las letras con la sombra igual que en los intentos mencionados.

Saludos,
Colegota
Título: Re: Bordes
Publicado por: redy en 28 mar 2008, 00:42 am
Pues ahora que lo dices acabo de recordar que tenía pendiente arreglar el segundo que no sitúa bien los textos...

Creo que ahora ya si:

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="center"
POS2="west"
POSCOPY="southeast"
PREFIJO="s_"
_SOMBRA="8"
_BORDE="20"
COLOR="ORANGE"
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
POSICIONESC=( "" southwest south southeast )
POSICIONES=( "" west center east)

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=${POSICIONESC[$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 "$COLOR" -border "${BORDE}x${BORDE}" \
              -gravity southeast \
              -crop "+$(( SOMBRA*2 ))+$(( SOMBRA*2 ))" \
              \( -background "$COLOR" -size "$((imageX+2*BORDE))"x"$MARCO" xc:"$COLOR" \
              -fill "$TINTA" \
              -gravity "$POS1" -font "$FONT1" -pointsize "$TAMANO1" -draw "text $((BORDE * ( ${#POS1}!=6) )),0 '$MTIT1'" \
              -gravity "$POS2" -font "$FONT2" -pointsize "$TAMANO2" -draw "text $((BORDE * ( ${#POS2}!=6) )),0 '$MTIT2'" \) \
              -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) ))+"$TAMANO" \) \
                  -composite -compose src-in \
              "$OUT"
        else
                echo "$1 : parámetro o nombre de fichero incorrecto. Use -h para ayuda"
        fi
        ;;
  esac
  shift
done


Además el borde se le puede poner en cualquier color (Le puse el naranja por defecto para hacer pruebas pero lo podeis cambiar, línea 31: COLOR="ORANGE", Ya sabeis que se puede usar la forma #RRGGBB como en la web).

Con respecto a lo del fondo negro, o fondos oscuros en general no sé que tal quedaría la sombra...

Lo acabo de probar y no queda mal del todo, aunque este tipo de marco personalmente me gusta con el borde blanco...

Título: Re: Bordes
Publicado por: jofial en 19 oct 2008, 16:02 pm
Hola redy,

Como puedo conseguir que se ejecute el macro, sin tener que tenerlo en la carpeta donde alojo las imágenes. En /bin?  hay que tenerlo dado de alta en algún script de inicio?

Saludos

Jose
Título: Re: Bordes
Publicado por: Colegota en 19 oct 2008, 16:42 pm
Buenas,

uno que es un vago...  8-)

Código: [Seleccionar]
[colegota@localhost ~]$ /home/colegota/talleres/poner_marco_2008-13 -g 28 -t "David, verano del 2008" da*

Como lo suelo hacer con cierta frecuencia lo tengo "a tiro de flecha" en el terminal (vamos que le doy a la flcha arriba para que me salgan las últimas órdenes, siempre tengo un terminal abierto en cada escritorio). Pero bueno,  que si lo quieres hacer elegante, añade el path de tus propios ejecutables a $PATH y no tienes que andar moviendo a /bin que es de root.

Saludos,
Colegota
Título: Re: Bordes
Publicado por: jofial en 19 oct 2008, 18:14 pm
Código: [Seleccionar]
[colegota@localhost ~]$ /home/colegota/talleres/poner_marco_2008-13 -g 28 -t "David, verano del 2008" da*

Como lo suelo hacer con cierta frecuencia lo tengo "a tiro de flecha" en el terminal (vamos que le doy a la flcha arriba para que me salgan las últimas órdenes, siempre tengo un terminal abierto en cada escritorio). Pero bueno,  que si lo quieres hacer elegante, añade el path de tus propios ejecutables a $PATH y no tienes que andar moviendo a /bin que es de root.

Es lo que hago yo, pero me parece incomodo

Gracias por el aporte.  q:)

Nos vemos el viernes....

Saludos

Jose
Título: Re: Bordes
Publicado por: redy en 20 oct 2008, 05:52 am
Todas las distribuciones que conozco meten ~/bin en el path por defecto, así que todas mis chapuzitas las meto en /home/redy/bin así puedo usarlas sin más que poner el nombre, como si estuviesen en /bin o en /usr/bin pero sin tener que andar haciéndote root para ponerlas allí.
Título: Re: Bordes
Publicado por: Colegota en 20 oct 2008, 09:24 am
Buenas,

Todas las distribuciones que conozco meten ~/bin en el path por defecto,...

¡a buenas horas me entero yo de esto!  :sonroja2: Bueno, nunca es tarde. Gracias. :)

Saludos,
Colegota
Título: Re: Bordes
Publicado por: jofial en 31 may 2009, 19:36 pm
Hola redy,

desde que he cambiado al conejo cornudo (Ubuntu Jaunty) que el script me construye el marco, pero me deja la foto en B&N. Lo he probado desde el propio directorio donde tengo la imagen y desde el /bin (que es donde se puede usar indiscriminademente).

Tanto si uso extensiones JPG, como jpg. Me he repasado el script, pero no atino a ver cual pueda ser la causa.

Alguna sugerencia

Jose
Título: Re: Bordes
Publicado por: JoRdi en 31 may 2009, 20:56 pm
Buenas,

desde que he cambiado al conejo cornudo (Ubuntu Jaunty) que el script me construye el marco, pero me deja la foto en B&N.

Cuando uno es "cornudo" es que la cosa está muy negra, así que el pobre conejito está sufriendo por ello :-b , bromas a parte, es curioso lo que te ocurre, yo no te puedo ayudar :ejem: , supongo que redy si, suerte.

Saludos, JoRdi :-)
Título: Re: Bordes
Publicado por: Quo Vadis en 01 jun 2009, 01:48 am
Bueno yo todavía estoy en pañales, osea aprendiendo. Me bajé  el librito de Pedro Reina sobre informática, esta un poco atrasado, de hace unos diez años y eso para este mundillo es mucho, pero algo se aprende, sigo con el tema, saludos.
Título: Re: Bordes
Publicado por: Quo Vadis en 01 jun 2009, 02:06 am
Por cierto se me olvidaba, ya está PerfectRaw-0,70 Alpha: http://www.ojodigital.com/foro/perfectraw-perfectblend/
tiene muy buena pinta.
Título: Re: Bordes
Publicado por: redy en 01 jun 2009, 05:02 am
Hola redy,

desde que he cambiado al conejo cornudo (Ubuntu Jaunty) que el script me construye el marco, pero me deja la foto en B&N. Lo he probado desde el propio directorio donde tengo la imagen y desde el /bin (que es donde se puede usar indiscriminademente).


Dime que versión de imagemagick usar el conejilope y lo pruebo con esa misma versión a ver...

Para ver la versión usa:
Código: [Seleccionar]
convert -version

Título: Re: Bordes
Publicado por: jofial en 01 jun 2009, 14:15 pm
Dime que versión de imagemagick usar el conejilope y lo pruebo con esa misma versión a ver...

Pues la versión es
Código: [Seleccionar]
jose@jose-desktop:~$ convert -version
Version: ImageMagick 6.4.5 2009-01-22 Q16 OpenMP http://www.imagemagick.org
Copyright: Copyright (C) 1999-2008 ImageMagick Studio LLC

De todas formas te adjunto un pantallazo de Synaptic para que veas la versión que consta instalada (me da que no es la misma) Puede ser un error al actualizar Ubuntu desde la versión anterior sin hacer una instalación "limpia". Igual desinstalando y volviendo a instalar la versión de ImageMagick se arregla, pero antes de "inventar", prefiero tener opiniones mas expertas.

(http://www.fotolibre.org/albums/userpics/10036/normal_Pantallazo-Gestor_de_paquetes_Synaptic_.png) (http://www.fotolibre.org/albums/userpics/10036/Pantallazo-Gestor_de_paquetes_Synaptic_.png)

Gracias

Jose
Título: Re: Bordes
Publicado por: redy en 01 jun 2009, 18:34 pm
Version: ImageMagick 6.4.5 2009-01-22 Q16 OpenMP http://www.imagemagick.org

No logro reproducir el error. Tanto en la 6.4.2 como en la 6.5.0 me funcionan bien ¿No estarás usando una versión antigua del script?
Título: Re: Bordes
Publicado por: jofial en 01 jun 2009, 20:31 pm
Hola redy,
Uso la ultima que hay en este hilo (hasta ahora iba de lujo).

No acabo de pillar porque convierte la imagen en B&N (además tarda mucho mas que antes).

En fin iré buscando por ahí.  Lástima porque me facilitaba mucho el trabajo.

Saludos

Jose
Título: Re: Bordes
Publicado por: Trava80 en 15 jun 2009, 06:47 am
Hola,

Aunque sigo este foro hace tiempo me acabo de registrar para comentar también que tengo el mismo problema que jofial.

Tengo 2 pc's en uno de ellos ubuntu 8.10 y todo va perfectamente, pero en 9.04 el marco me sale en B&W. En el otro marco que creó redy, el que es transparente y va superpuesto encima de la foto que quieras enmarcar, el terminal me de este error: "convert: unable to open image `f-/home/rober/Imágenes/R0010912.JPG': No such file or directory @ magick/blob.c/OpenBlob/2418."

A lo mejor redy con este problema puede sacar algo mas en claro.

Un saludo y gracias por aceptarme en esta comunidad libre  :) .
Título: Re: Bordes
Publicado por: invisible en 15 jun 2009, 06:51 am
 :ot:
... Un saludo y gracias por aceptarme en esta comunidad libre  :) .
Faltaría más... si quieres, pásate por el subforo de presentaciones (http://comunidad.fotolibre.net/index.php/board,4.0.html) que serás agasajado con todos los honores, alfombra de pétalos incluida... q:)
 :ot:
Título: Re: Bordes
Publicado por: redy en 15 jun 2009, 10:15 am
En el otro marco que creó redy, el que es transparente y va superpuesto encima de la foto que quieras enmarcar, el terminal me de este error: "convert: unable to open image `f-/home/rober/Imágenes/R0010912.JPG': No such file or directory @ magick/blob.c/OpenBlob/2418."

Eso está solucionado aquí (http://comunidad.fotolibre.net/index.php/topic,204.msg8953.html#msg8953) antes de esasa modificaciones el script no permitía trabajar con paths, solo se le podían pasar ficheros en el path actual.

Título: Re: Bordes
Publicado por: Trava80 en 16 jun 2009, 06:11 am
Gracias Redy, ese marco está solucionado.

Un saludo
Título: Re: Bordes
Publicado por: jofial en 29 ago 2009, 15:01 pm
Hola redy,

Investigando tu script, para averiguar (si podia) donde podia estar el problema a lo máximo que he llegado es a que este script (http://comunidad.fotolibre.net/index.php/topic,204.msg8953.html#msg8953) me da el marco y la foto tal cual se espera en color y correctamente al estilo Colegota  :-b

Pero como a mi me gusta mas el estilo invi  :-b :-b, pues me interesaba mas el ultimo script que lo incorporaba. Que es justamente el que me da el fallo. Ademas esta vez te adjunto tal como queda la foto y el script usado.

¿Puedes darle un vistazo a ver si ves donde esta el gazapo? No he personalizado los mismos y salen con tu nombre y los parámetros iniciales tuyos, yo los he renombrado.

Script usado estilo Colegota (http://comunidad.fotolibre.net/index.php/topic,204.msg8953.html#msg8953) ->enmarca

Resultado imagen estilo Colegota

(http://www.fotolibre.org/albums/userpics/10036/normal_f-prueba.jpg)

Script usado estilo invi (http://comunidad.fotolibre.net/index.php/topic,204.msg18091.html#msg18091) ->ponmarco

Resultado estilo invi

(http://www.fotolibre.org/albums/userpics/10036/normal_s_prueba.jpg)

Es curioso que el lienzo sea gris... por cierto me da un error respecto a la fuente (que se corrige cuando le doy el path correcto) que te incluyo para descartar todas las posibilidades. Con el path corregido sigue dando un lienzo gris...  :cabezazos:

Código: [Seleccionar]
jose@jose-desktop:~/bin$ ponmarco prueba.jpg
Poniendo marco a prueba.jpg -> ./s_prueba.jpg
convert: unable to read font `/usr/share/fonts/TTF/VeraBI.ttf' @ magick/annotate.c/RenderType/1066.
jose@jose-desktop:~/bin$ enmarca prueba.jpg
Poniendo marco a -> prueba.jpg
convert: unable to read font `/usr/share/fonts/TTF/VeraBI.ttf' @ magick/annotate.c/RenderType/1066.
jose@jose-desktop:~/bin$

y para acabar la versión de Imagemagick

Código: [Seleccionar]
jose@jose-desktop:~/bin$ convert -version
Version: ImageMagick 6.4.5 2009-06-04 Q16 OpenMP http://www.imagemagick.org
Copyright: Copyright (C) 1999-2008 ImageMagick Studio LLC

Saludos y gracias por intentarlo

Jose

Modificado por error en un enlace
Título: Re: Bordes
Publicado por: invisible en 29 ago 2009, 15:59 pm
Estas cosas te pasan por copión. :-XX :-XX :-XX :toma:
Título: Re: Bordes
Publicado por: JoRdi en 30 ago 2009, 16:27 pm
Estas cosas te pasan por copión. :-XX :-XX :-XX :toma:

 :DDD :DDD :DDD :DDD :DDD

Ta lu3go :-v-
Título: Re: Bordes
Publicado por: Colegota en 25 sep 2009, 16:02 pm
Hola redy,

Investigando tu script, ...
(...)
Es curioso que el lienzo sea gris... por cierto me da un error respecto a la fuente (que se corrige cuando le doy el path correcto) que te incluyo para descartar todas las posibilidades. Con el path corregido sigue dando un lienzo gris...  :cabezazos:

Código: [Seleccionar]
jose@jose-desktop:~/bin$ ponmarco prueba.jpg
Poniendo marco a prueba.jpg -> ./s_prueba.jpg
convert: unable to read font `/usr/share/fonts/TTF/VeraBI.ttf' @ magick/annotate.c/RenderType/1066.
jose@jose-desktop:~/bin$ enmarca prueba.jpg
Poniendo marco a -> prueba.jpg
convert: unable to read font `/usr/share/fonts/TTF/VeraBI.ttf' @ magick/annotate.c/RenderType/1066.
jose@jose-desktop:~/bin$
(...)

Buenas Jose,

no había visto este mensaje y parece que Redy tampoco. :)))

Respecto a la fuente, entiendo que ya sabes que en cada distro suele variar y que para eso está la línea
Código: [Seleccionar]
FONT="/usr/share/fonts/TTF/VeraBI.ttf"que tienes que editar y poner el de la tuya.

Para los colores, están las líneas
Código: [Seleccionar]
COLOR="ORANGE"
TINTA="#101010"

Desconozco si en alguna versión más reciente de ImageMagick ha cambiado la forma de nombrar a los colores, que me extrañaría, pero lo que necesitamos saber para investigar el problema es cuál es tu script actual. El que estás usando, no el enlace al que te has basado. Porfa, pégalo completo en un nuevo mensaje y lo miramos. Así podemos probarlo en nuestros ordenatas a ver qué nos sale.

Saludos,
Colegota
Título: Re: Bordes
Publicado por: redy en 25 sep 2009, 17:28 pm
Tengo que darle unas vueltas al tema. Yo al trabajar con imagemagick era partidario de hacer todo de una sola pasada, más que nada porque trabajando con jpg's cada vez que guardas se comprime y se incrementa la pérdida de calidad.

Pero acabo de descubrir que puedo hacerlo en varios pasos guardando ficheros temporales en el formato propietario de imagemagick que ni pierden calidad, ni ninguno de los datos existentes en el jpg, ni siquiera el nivel de compresión. Hice varios experimentos uno haciéndo varias transformaciones en un solo paso y otro aplicando los mismos comaandos pero en varios pasos, guardando ficheros intermedios, y solo guardando en jpg en el paso final; y los ficheros obtenidos eran exactamente iguales comparados en binario. Así que voy a intentar reescribir los dos scripts en varios pasos. Pero eso me llevará un tiempo. Además quiero ponerle una especie de wizard en plan GUI para poder lanzarlos con facilidad desde gqview o desde el nautilus por ejemplo...

Título: Re: Bordes
Publicado por: jofial en 25 sep 2009, 22:03 pm
Respecto a la fuente, entiendo que ya sabes que en cada distro suele variar y que para eso está la línea
Código: [Seleccionar]
FONT="/usr/share/fonts/TTF/VeraBI.ttf"que tienes que editar y poner el de la tuya.

Si, asi lo tenia, pero para no modificar nada del original de redy no lo cambie.

Porfa, pégalo completo en un nuevo mensaje y lo miramos. Así podemos probarlo en nuestros ordenatas a ver qué nos sale.

Ahi va... pero es el mismo  :ejem:

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="center"
POS2="west"
POSCOPY="southeast"
PREFIJO="s_"
_SOMBRA="8"
_BORDE="20"
COLOR="ORANGE"
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
POSICIONESC=( "" southwest south southeast )
POSICIONES=( "" west center east)

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=${POSICIONESC[$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 "$COLOR" -border "${BORDE}x${BORDE}" \
              -gravity southeast \
              -crop "+$(( SOMBRA*2 ))+$(( SOMBRA*2 ))" \
              \( -background "$COLOR" -size "$((imageX+2*BORDE))"x"$MARCO" xc:"$COLOR" \
              -fill "$TINTA" \
              -gravity "$POS1" -font "$FONT1" -pointsize "$TAMANO1" -draw "text $((BORDE * ( ${#POS1}!=6) )),0 '$MTIT1'" \
              -gravity "$POS2" -font "$FONT2" -pointsize "$TAMANO2" -draw "text $((BORDE * ( ${#POS2}!=6) )),0 '$MTIT2'" \) \
              -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) ))+"$TAMANO" \) \
                  -composite -compose src-in \
              "$OUT"
        else
                echo "$1 : parámetro o nombre de fichero incorrecto. Use -h para ayuda"
        fi
        ;;
  esac
  shift
done

Saludos y gracias por acordaros.

Jose
Título: Re: Bordes
Publicado por: jofial en 25 sep 2009, 22:05 pm
Tengo que darle unas vueltas al tema

Las que necesites.

De todas formas estoy esperando la nueva versión del Ubuntu, para hacer una instalación en limpio y en 64 bitios y entonces veremos si es un problema de la actualización a la v 9.04 (no instalación limpia).

Saludos

Jose
Título: Re: Bordes
Publicado por: buhito en 26 sep 2009, 18:03 pm
Tengo que darle unas vueltas al tema

Las que necesites.

De todas formas estoy esperando la nueva versión del Ubuntu, para hacer una instalación en limpio y en 64 bitios y entonces veremos si es un problema de la actualización a la v 9.04 (no instalación limpia).

Saludos

Jose

Con el permiso de Redy, Colegota y demas maestros me parece que despues de mucha prueba/error he dado con el problema de la imagen en blanco y negro que deja despues de ponerle el marco.

Las primeras lineas de convert son:
           "convert \
              \( "$IN" -modulate 80 +contrast +contrast +contrast\
              -colorspace gray \
              -channel RGBA \"


yo la -colorspace gray\  le he sustituido el parametro por RGB y me ha funcionado.

A tener en cuenta soy novato en Linux y fotografia por lo tanto que opinen ellos.

Ya que estamos una pregunta Redy ¿Donde marca el tamaño del borde de abajo del marco?

Un saludo a todos.
Título: Re: Bordes
Publicado por: redy en 26 sep 2009, 18:30 pm
yo la -colorspace gray\  le he sustituido el parametro por RGB y me ha funcionado.


¿Y no te pone también en color la sombra?

Cita
Ya que estamos una pregunta Redy ¿Donde marca el tamaño del borde de abajo del marco?

Lo puedes decidir tu (al igual que muchas otras cosas) pasando un valor en pixels tras el parámetro -g o --tamanomarco

Por defecto se calcula como MARCO="$(( MAXsize/25+1 ))" o sea un 25avo del lado mayor de la imágen original mas un pixel.

Y ahora al grano. Una primera version del asunto trabajando 'por tramos' que creo que debería solucionar el problema del blanco y negro que por lo visto sólo pasa con algunas versiones de imagemagick podría ser esta:

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"
FONT1="Bitstream-Vera-Sans-Bold-Oblique"
FONT2="$FONT1"
FONT="$FONT1"
CCFONT="CC-Icons-Regular"
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="center"
POS2="west"
POSCOPY="southeast"
PREFIJO="s_"
_SOMBRA="12"
_BORDE="22"
COLOR="White"
TINTA="Blue"

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

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
}

# Preparamos el asunto del directorio temporal y ponemos un trap para borrarlo
# tanto si finaliza correctamente como si se produce un error.

DIRTEMP="$(mktemp -d -p "${TMP:-/tmp}" marcoXXXXXXX)" \
    && trap 'rm -rf "$DIRTEMP"'  SIGINT SIGTERM SIGQUIT EXIT \
    || { echo 'Error creando directorio temporal' >&2; exit 1; }

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=${POSICIONESC[$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")
           
# Generamos la sombra y el borde

   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 -bordercolor "$COLOR" -border "${BORDE}x${BORDE}" \
      -gravity southeast \
      -crop "+$(( SOMBRA*2 ))+$(( SOMBRA*2 ))" \
      -background "$COLOR" -size "$((imageX+2*BORDE))"x"$MARCO" xc:"$COLOR" \
      "${DIRTEMP}/tmp.miff" \
   
# Ponemos los títulos

   convert "${DIRTEMP}/tmp.miff" \
              -colorspace RGB \
      -channel RGBA \
      -fill "$TINTA" \
      -gravity "$POS1" -font "$FONT1" -pointsize "$TAMANO1" -draw "text $((BORDE * ( ${#POS1}!=6) )),0 '$MTIT1'" \
      -gravity "$POS2" -font "$FONT2" -pointsize "$TAMANO2" -draw "text $((BORDE * ( ${#POS2}!=6) )),0 '$MTIT2'" \
      -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) ))+"$TAMANO" \
                  -composite -compose src-in "${DIRTEMP}/tmp2.miff"

# Ponemos la imágen original encima

           convert -gravity northwest -geometry +${BORDE}+${BORDE} -composite "${DIRTEMP}/tmp2.miff" "$IN" "$OUT"

# Descomentar las dos líneas siguientes para obtener una copia de los ficheros temporales antes de borrarlos
           # cp "${DIRTEMP}/tmp.miff" "$OUT-tmp.miff "
           # cp "${DIRTEMP}/tmp2.miff" "$OUT-tmp2.miff"
        else
                echo "$1 : parámetro o nombre de fichero incorrecto. Use -h para ayuda"
        fi
        ;;
  esac
  shift
done

Ya me contareis si funciona. Si funciona a ver si lo simplifico un poco más, luego le atacaré al otro y prepararé los wizards...
Título: Re: Bordes
Publicado por: jofial en 26 sep 2009, 20:09 pm
Hola redy,

He probado y esto es lo que me dice:

Código: [Seleccionar]
jose@jose-desktop:~/Imagenes/2009-09-20--13.56.21$ ponmarco pertusa_pano.jpg
mktemp: invalid option -- '-'
Usage: mktemp [-V] | [-dqtu] [-p prefix] [template]
convert: unable to open image `/tmp.miff': Permission denied @ magick/blob.c/OpenBlob/2418.
convert: unable to open image `/tmp.miff': No such file or directory @ magick/blob.c/OpenBlob/2418.
convert: unable to read font `/usr/share/fonts/TTF/VeraBI.ttf' @ magick/annotate.c/RenderType/1066.
convert: missing an image filename `/tmp2.miff' @ wand/convert.c/ConvertImageCommand/2710.
convert: wand/mogrify.c:7575: SyncImagesSettings: Assertion `images != (Image *) ((void *)0)' failed.
/home/jose/bin/ponmarco: line 107:  6124 Cancelado               convert -gravity northwest -geometry +${BORDE}+${BORDE} -composite "${DIRTEMP}/tmp2.miff" "$IN" "$OUT"

Lo he intentado con el comando "sudo" y me dice

Código: [Seleccionar]
jose@jose-desktop:~/Imagenes/2009-09-20--13.56.21$ sudo ponmarco pertusa_pano.jpg
[sudo] password for jose:
sudo: ponmarco: command not found

Pero encantado de hacer de "betatester"  ;) Ya nos dirás que tenemos que hacer ahora.



Con el permiso de Redy, Colegota y demas maestros me parece que despues de mucha prueba/error he dado con el problema de la imagen en blanco y negro que deja despues de ponerle el marco.

Las primeras lineas de convert son:
           "convert \
              \( "$IN" -modulate 80 +contrast +contrast +contrast\
              -colorspace gray \
              -channel RGBA \"


yo la -colorspace gray\  le he sustituido el parametro por RGB y me ha funcionado.

Y a mi también... :yahoo: :yahoo: :yahoo:

Saludos

Jose
Título: Re: Bordes
Publicado por: redy en 26 sep 2009, 21:03 pm

He probado y esto es lo que me dice:

Código: [Seleccionar]
jose@jose-desktop:~/Imagenes/2009-09-20--13.56.21$ ponmarco pertusa_pano.jpg
mktemp: invalid option -- '-'
Usage: mktemp [-V] | [-dqtu] [-p prefix] [template]

Vale, falla al crear el directorio temporal y luego se estrella porque no existe.  NO LO EJECUTEIS CON SUDO (por suerte no funcionó) sobre todo mientras estemos probando, en principio el script es bastante inofensivo, pero ese 'rm -rf'  para borrar el directorio temporal en el trap, me preocupa. Tu imagínate que el fallo que hubo al crear el temporal hiciese que la variablel DIRTEMP acabara conteniendo un '/' solamente (eso es casi imposible pero imagínatelo) te cargarías todo el sistema de ficheros, y después mi cuello :buf:.

Creía que --tmpdir era un estandar en mktemp pero por lo visto solo debe funcionar en algunas versiones y la forma correcta debe ser hacerlo con -p

He cambiado un poquito en torno a las líneas 101, 102 y 103 cópialo de nuevo y me cuentas.

Título: Re: Bordes
Publicado por: buhito en 27 sep 2009, 07:17 am
¿Y no te pone también en color la sombra?

No la sombra me la pone en negro. Tambien he probado ha ponerla en color y me la pone bien en color.


Saludos a todos.
Título: Re: Bordes
Publicado por: jofial en 27 sep 2009, 08:21 am
¿Y no te pone también en color la sombra?
No la sombra me la pone en negro. Tambien he probado ha ponerla en color y me la pone bien en color.

Pues a mi me la pone en color  :sesiente: aqui (http://www.fotolibre.org/albums/userpics/10036/s_aquell_arbre.jpg) la prueba.  :sesiente:

Saludos

Jose
Título: Re: Bordes
Publicado por: jofial en 27 sep 2009, 08:25 am

He probado y esto es lo que me dice:

Código: [Seleccionar]
jose@jose-desktop:~/Imagenes/2009-09-20--13.56.21$ ponmarco pertusa_pano.jpg
mktemp: invalid option -- '-'
Usage: mktemp [-V] | [-dqtu] [-p prefix] [template]

NO LO EJECUTEIS CON SUDO (por suerte no funcionó) sobre todo mientras estemos probando

Oido cocina... Por suerte tengo copias de seguridad... pero mejor saberlo. Asias  q:)


He cambiado un poquito en torno a las líneas 101, 102 y 103 cópialo de nuevo y me cuentas.

Marchando...

Saludos

Jose
Título: Re: Bordes
Publicado por: jofial en 27 sep 2009, 08:41 am
Hola redy,

copiado tal cual lo has puesto y este es el resultado, antes la salida por terminal:

Código: [Seleccionar]
jose@jose-desktop:~/Imagenes/2009-05-19--17.00.00$ marcoredyv1 aquell_arbre.jpg
convert: unable to read font `/usr/share/fonts/TTF/VeraBI.ttf' @ magick/annotate.c/RenderType/1066.

Eso es porque no tengo esta fuente, pero cuando le pongo el path correcto a la fuente que suelo usas FreeSans, ese error no sale.

El resultado en vertical y en horizontal:

(http://www.fotolibre.org/albums/userpics/10036/thumb_s_aquell_arbre%7E0.jpg) (http://www.fotolibre.org/albums/userpics/10036/s_aquell_arbre%7E0.jpg)

(http://www.fotolibre.org/albums/userpics/10036/thumb_s_FSCK0002.jpg) (http://www.fotolibre.org/albums/userpics/10036/s_FSCK0002.jpg)

Saludos

Jose
Título: Re: Bordes
Publicado por: redy en 27 sep 2009, 18:33 pm
El resultado en vertical y en horizontal:

Pues veo dos problemas, lo del gris, que creo que con la última modificación que hice hace un momento debería resolverse y que la sombra la hace mal.

Leyendo leyendo, dicen que la versión de imagemagick que viene con la Ubuntu Conejilope Garboso apesta... (https://bugs.launchpad.net/ubuntu/+source/imagemagick/+bug/348862) y que lo mejor es o darle para adelante o para atrás. La 6.5 va bien pero tendrás que compilarla. La 6.3.7 que viene con la última debian también podría valer y esa igual puedes instalarla de un .deb quitando la 6.4.5 primero... No se que decirte, no tengo ubuntu para hacer experimentos.

Título: Re: Bordes
Publicado por: marceloanelli en 30 sep 2009, 18:06 pm
Hola a todos,

no uso debian o ubuntu sino opensuse y tengo problema con las fuentes ya que están ubicadas en directorios diferentes. Adicionalmente opensuse separa las fuenes instaladas por el sistema y las instaladas por el usuario, de hecho en realidad no he averiguado donde están.

Para adaptar el scripts a todas las distribuciones de linux no sería mejor usar estas definiciones?

FONT1="Bitstream-Vera-Sans-Bold-Oblique"
CCFONT="CC-Icons-Regular"

La lista de las fuentes que reconoce convert puede obtnerse con convert -list font > fuentes.txt y claro está uno debe revisar el diseño de las mismas con los visores. Lamentablemente los visores no usan el mismo nombre que usa imagemagick.

Saludos,
Título: Re: Bordes
Publicado por: redy en 30 sep 2009, 21:03 pm
Para adaptar el scripts a todas las distribuciones de linux no sería mejor usar estas definiciones?

FONT1="Bitstream-Vera-Sans-Bold-Oblique"
CCFONT="CC-Icons-Regular"

Pues tienes razón. Lo modifico.
Título: Re: Bordes sencillo doble filete clásico
Publicado por: marceloanelli en 30 sep 2009, 23:37 pm
Usando la forma de codificación de los parámetros de entrada, que normalmente eran $1, $2,,, sin ningún chequeo, y tomando como ejemplo los scripts de este tema, he mejorado un poco el script que uso para poner un borde, bastante sobrio y clásico compuesto por un filete blanco alrededor de la imágen y luego otro negro donde se ubican los textos.

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

#-----------------------------------------------------
# macborde.sh
#    borde compuesto por filete blanco y otro negro
#    de anchura variable.
# autor: Marcelo Anelli C.
#
# v1.00 20/08/2009 programa base
# v1.01 09/09/2009 control de entrada de datos
# v1.02 30/09/2009 separado de los textos usando gravity.
#
#-----------------------------------------------------

FUENTE="Bookman-DemiItalic"      # fuente a usar
CW=30                            # Filete blanco
CN=50                            # Borde Negro
PAR1="Fotografías de Marcelo Anelli"
CT="Fotografía: Marcelo Anelli, Caracas, 2009."
COLNEGRO="black"
COLBLANCO="white"

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

  PARAM="$1"
  case $PARAM in
        "--help"|--usage|-h)
           echo "Borde con filete blanco y filete negro al estilo MAC."
           echo "-----------------------------------------------------"
           echo ""
           echo "Uso:"
           echo ""
           echo "  $0 --help|--usage|-h Muestra esta ayuda"
           echo "  $0 [opciones] imágen"
           echo ""
           echo "  opciones disponibles:"
           echo ""
           echo "   --titulo|-t          \"Título de la imágen\""
           echo "   --copyright|-c       \"Mensaje de copyright\""
           echo "   --font|-f            Estilo de letra o fichero de fuente .ttf"
           echo "   --tamano|-s          Tamaño de la letra en puntos"
           echo "   --tamanonegro|-n     Tamaño del marco negro en pixels"
           echo "   --tamanoblanco|-b    Tamaño del marco blanco en pixels"
           echo "   --colnegro|-cn       Sustituir el negro por otro color."
           echo "   --colblanco|-cb      Sustituir el blanco por otro color."
           echo ""
           exit 0
        ;;

        "--titulo"|"-t")
           shift
           PAR1="$1"
        ;;

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

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

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

        "--tamanonegro"|"-n")
           shift
           CN=$1
        ;;

        "--tamanoblanco"|"-b")
           shift
           CW=$1
        ;;

        "----colnegro"|"-cn")
           shift
           COLNEGRO="$1"
        ;;

        "----colblanco"|"-cb")
           shift
           COLBLANCO="$1"
        ;;

        *)
           if [ -f "$PARAM" ]; then
             convert "$PARAM" -bordercolor "$COLBLANCO" -border $CW \
                     -bordercolor "$COLNEGRO" -border $CN \
                     -fill white -font $FUENTE -gravity NorthWest -draw "text 10,25 '$PAR1'" \
                     -gravity NorthEast -draw "text 10,25 '$CT'" "p_$PARAM"     
          fi

        ;;
  esac
  shift
done


Espero que sirva para alguien....
Título: Re: Bordes sencillo doble filete clásico
Publicado por: tat en 01 oct 2009, 04:23 am
Espero que sirva para alguien....
Seguro que si, gracias por tu aportación Marcelo  :-)
Título: Re: Bordes
Publicado por: jofial en 01 oct 2009, 16:42 pm
Hola Marcelo,

gracias en la carpeta bin lo tengo.

Saludos

Jose
Título: Re: Bordes
Publicado por: jofial en 03 oct 2009, 21:19 pm
La 6.5 va bien pero tendrás que compilarla.

Redy, gracias por tu apoyo, compilada la 6.5 y funcionando correctamente. La sombra es gris y redimensiona perfectamente. El script que uso es el final antes de la modificación de las fuentes que te propone Marcelo. Si alguien le ocurre el mismo problema y compila esta versión de Imagemagick, si no tiene la precaucion de incluir el path en el ./configure

Código: [Seleccionar]
./configure --prefix=/usr/local
al ejecutar el script puede que le de este problema

Código: [Seleccionar]
identify: error while loading shared libraries: libMagickCore.so.2: cannot open shared object file: No such file or directory
Código: [Seleccionar]
convert: error while loading shared libraries: libMagickWand.so.2: cannot open shared object file: No such file or directory

tendrá que hacer un enlace simbólico de estas bibliotecas a:

Código: [Seleccionar]
sudo ln -s /usr/local/lib/libMagickCore.so.2 /usr/lib/
sudo ln -s /usr/local/lib/libMagickWand.so.2 /usr/lib/

Asi me ha funcionado.

Saludos

Jose