Hogar Mapa Indice Busqueda Noticias Arca Enlaces Sobre LF
[Top bar]
[Bottom bar]
This article is available in: English  Castellano  Deutsch  Francais  Nederlands  Portugues  Russian  
convert to palmConvert to GutenPalm
or to PalmDoc

[Photo of the Author]
por

Sobre el autor:

Katja es la editora alemana de LinuxFocus. Le gusta Tux, el cine, la fotografía y el mar. Aquí se puede ver su página web.


Contenidos:

Hacer magia con las imágenes en la shell

[Illustration]

Resumen:

En este artículo veremos algunos conjuros que el mago ImageMagick puede realizar utilizando una colección de herramientas gráficas como ingredientes y la shell como su varita mágica.



 

Haciendo magia

En los tiempos antiguos, los magos cogían sus ingredientes, los mezclaban todos en un gran caldero, agitaban su varita mágica, murmuraban sus conjuros... y, de repente, alguien se convertía en rana. En nuestros tiempos modernos, los magos son como cualquier persona altamente especializada de la sociedad, y sus libros de conjuros sólo contienen unos pocos conjuros útiles para un uso genérico. En muchos aspectos, no pueden competir con el Gimp o muchos otros programas gráficos, pero tienen algunas características especiales que pueden resultar muy útiles.
Su verdadera fuerza radica en la posibilidad de automatizar muchos de sus procesos cuando se trabaja con ellos en una shell.

Pero antes vamos a divulgar algunos conjuros para poder tener una visión general de los ingredientes principales:

 

Los ingredientes

¿o qué es ImageMagick?

ImageMagick es una colección de herramientas gráficas para trabajar con imágenes. Las herramientas son display, import, animate, montage, convert, mogrify, identify y combine.
Display: Si tecleamos "display &", aparece una ventana de visualización y podemos trabajar directamente en la imagen. A través del menú podemos abrir un fichero, salvarlo o borrarlo, invertir o rotar, aplicar cambios al color o aplicar ciertos efectos, p.e. implosionar, realzar el dibujo, enmarcarlo y mucho más.
Con Import se pueden realizar capturas de toda la pantalla o de ciertas imágenes o ventanas.
Animate es una herramienta para la animación. Se puede seleccionar una serie de imágenes para representarlas una tras otra o se puede ver un gif animado.
Con Montage podemos, por ejemplo, crear una imagen en mosaico o conseguir una imagen en la que se pueden ver todas las imágenes que componen un gif animado.
Convert es una herramienta muy potente. Se puede cambiar el formato de una imagen, p.e. convertir una imagen gif en una imagen jpeg y viceversa, se puede cambiar el tamaño de una imagen y también aplicar un montón de efectos, p.e. carboncillo, a las imágenes.
Mogrify es muy similar a convert con la gran diferencia que con mogrify se puede sobreescribir la imagen actual, mientras que con convert y con las otras herramientas se ha de especificar un fichero en el cual se salvará la imagen resultante. No se suele utilizar.
Identify nos da información sobre la imagen, como su geometría, tamaño, nombre, formato, etc.
Combine combina dos o más imágenes en otra imagen. Por ejemplo podemos añadirle un logotipo a todas nuestras imágenes.

Para utilizar las herramientas debemos teclear su nombre, seguido de las opciones que queramos utilizar, la imagen que vamos a manipular y el nombre del fichero con el que vamos a grabar la imagen resultante.
Por ejemplo, si queremos aplicarle un efecto de carboncillo a tux1.gif con un factor de 3 y salvarla en tux1characoal.gif escribiremos:
convert -characoal 3 tux1.gif tux1characoal.gif

Después de esta visión de los ingredientes vamos a pobrar ahora algunos conjuros:  

Algunos Conjuros

 

Cambiando la altura y la anchura de nuestras imágenes

Imaginemos que tenemos un montón de imágenes con las últimas víctimas que hemos convertido en rana, y que queremos ponerlas en nuestra página web. Para reducir el tiempo de carga queremos que las imágenes sean más pequeñas.
Con la utilidad convert podemos hacer que nuestras imágenes sean más grandes o más pequeñas, o podemos generar thumbnails.
El comando
convert -geometry 60x80 image.gif out.gif
escala la imagen image.gif a una anchura de 60 y una altura de 80, escribiendo la imagen resultante en out.gif.

Por ejemplo, para dar a todas nuestras imágenes una altura y anchura de 80 de una sola pasada podemos escribir:
#!/bin/sh
for f in $* ;do
 convert -geometry 80x80 $file t_$file
 echo "<a href=\"$f\"><img src=\"t_$f\" width=\"80\" height=\"80\"></a>"
done
# end of script
(Teclearemos estas líneas en cualquier editor que elijamos (vi, emacs, nedit, kedit...) y las salvaremos como mksmallimage en nuestro directorio personal. Entonces abriremos una shell y teclearemos:
chmod 755 /home/katja/mksmallimage
(utilizaremos el nombre de nuestro directorio en vez de katja) Entonces podemos utilizar el script tecleando /home/katja/mksmallimage xxx.jpg *.gif lo que convertirá todos los archivos gif además del fichero xxx.jpg.)  

Creando imágenes de previsualización

Tenemos un CD con una colección de la gente que convertimos en rana en los dos últimos años. Ahora nuestro mago rival, que está muy celoso de nosotros, quiere la prueba de que incluso hemos convertido a su perro en rana. Y ahora nos pasamos el día entero buscando esa foto. Esto podría haberse evitado si hubiésemos tenido una imagen de índice con todas las imágenes de nuestro CD. Con ImageMagick es muy fácil crear una:
display "vid:*.jpg"
Esto genera una imagen índice de todas nuestras imágenes jpg en el directorio actual. O:
display "vid:frog/*"
genera una imagen índice de todas las imágenes en el directorio frog.
Pinchando con el botón derecho del ratón en una de las imágenes obtenemos un menú en el que podemos seleccionar "Load" para ver la imagen a tamaño completo.

[visual image directory]


Esta es una forma muy fácil de crear una imagen índice, pero dependiendo del ordenador puede llevar mucho tiempo la generación de la imagen índice y puede consumir mucha memoria si tenemos un gran número de imágenes. Por ello vamos a escribir un pequeño script htmlthumbnails, que será menos exigente con los recursos, y construiremos una página web en la que podremos pinchar en cualquiera de los thumbnails y obtener la imagen original.

El código html para esto es el siguiente:
<a href="file.gif"><img src="t_file.gif" width="60" height="80"></a>
El fichero original es file.gif, y el thumbnail es t_file.gif.
Ahora escribiremos un script que generará los thumbnails y escribirá el código html por nosotros.
for f in $* ;do
 convert -geometry 80x80 $file t_$file
 echo "<a href=\"$f\"><img src=\"t_$f\" width=\"80\" height=\"80\">"
done
El script anterior recorrerá todas las imágenes especificadas en la línea de comando, generará los thumbnails y escribirá el código html en la pantalla. Entonces podremos copiar y pegar el código html en nuestra página web.
Para hacer un script más completo le añadiremos alguna ayuda y chequeo de errores. Aquí está nuestro script final, llamado htmlthumbnails :
htmlthumbnails (en html para ver), htmlthumbnails (en texto para descarga)
 

Cambiando el formato de la imagen

La utilidad convert no sólo puede cambiar el tamaño de la imagen, sino también el formato. Por ejemplo podemos convertir una imagen gif a una imagen jpg y viceversa. El comando para hacerlo es, simplemente:
convert image.gif image.jpg
El programa convert reconoce el formato que tiene que utilizar por la extensión del fichero.
Para cambiar el formato de imagen de jpg a gif para múltiples imágenes utilizaremos:
for f in $* ;do
 if echo "$f" | grep -i "jpg$" > /dev/null ; then
   gif=`echo "$f" | sed 's/jpg$/gif/i'`
   echo "converting  $f to $gif ..."
   convert 80x80 $file $gif
 else
   echo echo "$f is not a jpg file, ignored"
 fi
done
Existe un gran número de formatos que ImageMagick puede reconocer.  

Poniendo un logo en todas nuestras imágenes

Nos gustaría añadir un pequeño logo como el que se puede ver a la derecha en un número determinado de imágenes. [linuxfocus stamp]

Este logo debería ser una imagen gif transparente. Nuestro logo debería situarse como una pequeña firma el la esquina inferior derecha de la imagen final, tal y como podemos ver en la siguiente imagen de Tux:

[tux with logo]

¿Cuál es el comando para hacerlo?
El programa combine se puede utilizar para combinar dos imágenes en una. Hay varias opciones que le dicen al programa como hacerlo:
combine -gravity SouthEast -compose Over img.jpg logo.gif stamp_img.jpg
La opción "gravity SouthEast" sitúa el logo.gif en la esquina inferior derecha. "compose Over" dice que reemplazaremos la imagen con el logo en los lugares en los que solapen.

Para tener un script totalmente funcional se pondrá el comando dentro de un bucle for, y se añadirá texto de ayuda y de comprobación de errores. Aquí está el script final, denominado "stampimages" :
stampimages (html para ver), stampimages (texto para descarga)
 

Obteniendo información de las propiedades de la imagen

"Identify" muestra detalles acerca del tipo de nuestras imágenes, su tamaño y geometría. Un ejemplo:
identify  image.jpg
da como resultado
image.jpg 340x254 DirectClass 13939b JPEG 0.1u 0:01
¿Qué puede hacer nuestro mago con esto? Bien, para diseñar buenas páginas web que muestren las imágenes a medida que la página se carga se debería especificar el tamaño exacto de todas las imágenes. El código html sería el siguiente:
<img src="image.jpg" width="340" height="254" alt="[sample picture]">
Cuando nuestras imágenes tienen diferentes tamaños y no conocemos la altura y anchura exactas de cada una de ellas podemos utilizar "identify" para ayudarnos. Escribiremos un script que leerá la salida de "identify" y mostrará esta línea. La geometría de la imagen es el segundo parámetro en la cadena de salida del programa "identify". Para obtener este parámetro utilizamos el comando awk:
identify  image.jpg | awk '{print $2}'
da como resultado
340x254
Ahora tendremos que dividir la geometría en anchura y altura. Esto se puede realizar con:
echo 340x254 | sed 's/[^0-9]/ /g' | awk '{print $1}'
que nos dará el ancho. La altura se puede obtener con:
echo 340x254 | sed 's/[^0-9]/ /g' | awk '{print $2}'
No fijemos nuestra atención en los comando exactos. Si todavía no los entendemos completamente aceptémoslos tal y como nos los dan. Habrá un artículo sobre programación en shell en la próxima entrega de LinuxFocus en el que se explicará toda su magia. El script final es el siguiente:
file=$1
geometry=`identify $file | awk '{print $2}'`
# geometry can be 563x144+0+0 or 75x98
# we need to get rid of the plus (+) and the x characters:
width=`echo $geometry | sed 's/[^0-9]/ /g' | awk '{print $1}'`
height=`echo $geometry | sed 's/[^0-9]/ /g' | awk '{print $2}'`
echo "<img src=\"$file\" width=\"$width\" height=\"$height\">"
Para obtener el script completo, de nuevo añadiremos texto de ayuda y comprobación de errores. Aquí está nuestro script final, denominado "imgsrcline" :
imgsrcline (html para ver), imgsrcline (texto para descarga)


Mientras jugaba con ImageMagick he encontrado que a veces hay discrepancia entre la documentación y la funcionalidad actual. Algunas características tampoco son muy estables. Sin embargo si nos atenemos a lo mostrado anteriormente podemos ver que es útil. Las funciones mostradas funcionan. He utilizado ImageMagick-4.2.9, ImagiMagick-5.2.9 y ImageMagick-5.3.0 y lo aprendido aquí funciona en todas estas versiones.

Espero que se haya obtenido una idea de lo que se puede hacer con ImageMagick y que se utilizarán los scripts, o incluso crear conjuros propios.
¡A divertirse!

 

Referencias

 

Formulario de "talkback" para este artículo

Cada artículo tiene su propia página de "talkback". A través de esa página puedes enviar un comentario o consultar los comentarios de otros lectores
 Ir a la página de "talkback" 

Contactar con el equipo de LinuFocus
© Katja Socher, FDL
LinuxFocus.org

Pinchar aquí para informar de algún problema o enviar comentarios a LinuxFocus
Información sobre la traducción:
en -> --
en -> es

2001-09-24, generated by lfparser version 2.9