Autor Tema: Bordes  (Leído 49098 veces)

Colegota

  • Palizas oficial
  • *
  • Mensajes: 8188
  • ¡Me faltan carretes!
    • ¡Me faltan carretes!
Bordes
« on: 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 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?
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
« Última Modificación: 11 jul 2007, 11:09 am por Colegota »
[Canon EOS 50 40D (sin diapos ni nada)] [Escáner Minolta DSE 5400] [Vuescan] [El GIMP] [Galería] [Página de Viajes]

Colegota

  • Palizas oficial
  • *
  • Mensajes: 8188
  • ¡Me faltan carretes!
    • ¡Me faltan carretes!
Re: Bordes
« Respuesta #1 on: 11 jul 2007, 11:41 am »
Buenas,

una petición de Quo Vadis 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. 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
[Canon EOS 50 40D (sin diapos ni nada)] [Escáner Minolta DSE 5400] [Vuescan] [El GIMP] [Galería] [Página de Viajes]

redy

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


Colegota

  • Palizas oficial
  • *
  • Mensajes: 8188
  • ¡Me faltan carretes!
    • ¡Me faltan carretes!
Re: Bordes
« Respuesta #3 on: 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
[Canon EOS 50 40D (sin diapos ni nada)] [Escáner Minolta DSE 5400] [Vuescan] [El GIMP] [Galería] [Página de Viajes]

redy

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


Colegota

  • Palizas oficial
  • *
  • Mensajes: 8188
  • ¡Me faltan carretes!
    • ¡Me faltan carretes!
Re: Bordes
« Respuesta #5 on: 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
[Canon EOS 50 40D (sin diapos ni nada)] [Escáner Minolta DSE 5400] [Vuescan] [El GIMP] [Galería] [Página de Viajes]

redy

  • Moderador
  • Bimilenari@
  • *****
  • Mensajes: 2897
  • Gnudista
    • Esteropes El Cíclope
Re: Bordes
« Respuesta #6 on: 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

(Foto original)


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


gecko

  • Veteran@
  • *****
  • Mensajes: 489
    • A un "clic" de la realidad
Re: Bordes
« Respuesta #7 on: 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?


redy

  • Moderador
  • Bimilenari@
  • *****
  • Mensajes: 2897
  • Gnudista
    • Esteropes El Cíclope
Re: Bordes
« Respuesta #8 on: 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.
« Última Modificación: 15 jul 2007, 08:44 am por redy »
Admiro a la gente que sabe contar historias solamente con sus fotos, porque en el fondo las fotos son como los chistes; si tienes que explicarlas es que no son buenas...


Colegota

  • Palizas oficial
  • *
  • Mensajes: 8188
  • ¡Me faltan carretes!
    • ¡Me faltan carretes!
Re: Bordes
« Respuesta #9 on: 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
[Canon EOS 50 40D (sin diapos ni nada)] [Escáner Minolta DSE 5400] [Vuescan] [El GIMP] [Galería] [Página de Viajes]

redy

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


redy

  • Moderador
  • Bimilenari@
  • *****
  • Mensajes: 2897
  • Gnudista
    • Esteropes El Cíclope
Re: Bordes
« Respuesta #11 on: 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, 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.

Admiro a la gente que sabe contar historias solamente con sus fotos, porque en el fondo las fotos son como los chistes; si tienes que explicarlas es que no son buenas...


Colegota

  • Palizas oficial
  • *
  • Mensajes: 8188
  • ¡Me faltan carretes!
    • ¡Me faltan carretes!
Re: Bordes
« Respuesta #12 on: 16 jul 2007, 12:22 pm »
Buenas,

Bueno, si la otra plataforma es windows creo que lo mejor es instalar cygwin, 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.
Por si alguien le interesa, en la Wikipedia hay más información sobre Cygwin en la lengua de Cervantes.

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

redy

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


Colegota

  • Palizas oficial
  • *
  • Mensajes: 8188
  • ¡Me faltan carretes!
    • ¡Me faltan carretes!
Re: Bordes
« Respuesta #14 on: 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".  ;)
[Canon EOS 50 40D (sin diapos ni nada)] [Escáner Minolta DSE 5400] [Vuescan] [El GIMP] [Galería] [Página de Viajes]