Este artículo está disponible en los siguientes idiomas: English Castellano Deutsch Francais Nederlands Portugues Russian Turkce |
por Katja Socher 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:
|
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.
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:
¿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.convert -geometry 60x80 image.gif out.gifescala la imagen image.gif a una anchura de 60 y una altura de 80, escribiendo la imagen resultante en out.gif.
#!/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.)
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.
<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.
for f in $* ;do convert -geometry 80x80 $file t_$file echo "<a href=\"$f\"><img src=\"t_$f\" width=\"80\" height=\"80\">" doneEl 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.
convert image.gif image.jpgEl programa convert reconoce el formato que tiene que utilizar por la extensión del fichero.
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 doneExiste un gran número de formatos que ImageMagick puede reconocer.
combine -gravity SouthEast -compose Over img.jpg logo.gif stamp_img.jpgLa 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.
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 340x254Ahora 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" :
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!
|
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:
|
2001-09-24, generated by lfparser version 2.9