Ejemplos de uso de ImageMagick
ImageMagick versión 7
Estas páginas reúnen ejemplos de uso de ImageMagick (abreviado «IM») versión 7 desde la línea de comandos. Para muchos de ellos existe también una forma de escritura que corresponde directamente a la versión heredada versión 6. Además, muestran lo que se puede hacer con la interfaz de programación de aplicaciones (API) de ImageMagick. Aspiran a ser la primera página que un usuario de IM debería visitar tras leer el conciso manual de opciones de la línea de comandos (CLI).
En la red se repite una y otra vez la misma pregunta: «¿Cómo se hace para…?». Esperamos que estas páginas respondan a la mayoría de las dudas habituales de tipo «cómo hacerlo».
Sitios relacionados: Fred's ImageMagick Scripts / RubbleWebs (usar el CLI de IM desde PHP) / Snibgo's ImageMagick pages / Sitio oficial de ImageMagick
ℹ️ Esta página es una traducción no oficial de usage.imagemagick.org (IM Examples, por Anthony Thyssen). Para la traducción al japonés de la documentación principal de ImageMagick, consulte Documentación de ImageMagick en japonés.
Ejemplos prácticos (Practical Examples)
- Uso básico
- Comandos básicos y manejo de imágenes
- Manejo de archivos de imagen
- Lectura y escritura de imágenes
- Principales formatos de imagen
- Manejo de imágenes GIF, JPEG y PNG
- De texto a imagen
- Convertir texto en imagen
- Efectos de fuentes compuestas
- Estilos y técnicas de dibujo de fuentes
- Anotaciones sobre imágenes
- Etiquetado y superposición de imágenes
- Miniaturas y marcos
- Pequeñas imágenes de referencia de fotos grandes
- Procesado de fotos
- Procesar fotografías
- Corrección de lente
- Corregir la distorsión de las fotos
- Montaje (disposición)
- Índice y disposición de imágenes
- Capas de varias imágenes
- Combinar varias imágenes
- Fundamentos de la animación
- Creación y estudio de animaciones
- Optimización de animación
- Hacer más pequeñas las animaciones GIF
- Modificación de animación
- Modificación e integración de animaciones
- Manejo de vídeo
- Trabajar con imágenes de vídeo real
- Comparación de imágenes
- Comparar dos o más imágenes
- Técnicas avanzadas
- Manipulación compleja de imágenes
- Ejemplos de fondos
- Ejemplos para crear fondos aleatorios
- Repositorios de distribución
- Enlaces a otros scripts e información de IM
- Índice de referencia
- Índice rápido de opciones concretas
- Scripts auxiliares
- Scripts de shell usados en los ejemplos
Técnicas básicas (Basic Techniques)
- Creación de lienzos
- Crear lienzos e imágenes de fondo
- Fundamentos del color y los canales
- Manejo del color a bajo nivel
- Modificación del color
- Modificaciones de color habituales
- Máscaras y eliminación de fondo
- Manejo del canal alfa y la transparencia
- Reducción de color y tramado
- Reducir el número de colores
- Recorte y bordes
- Cortar, extraer, enmarcar y recortar
- Redimensionado y escalado
- Ampliar y reducir imágenes
- Filtros de remuestreo
- Control del redimensionado de imágenes
- Composición de imágenes
- Superposición e integración de dos imágenes
- Dibujo sobre imágenes
- Gráficos vectoriales, imágenes MVG y SVG
- Deformaciones simples de imagen
- Volteo, rotación y giro
- Transformaciones de distorsión de imagen
- Como en la sala de espejos de un parque de atracciones
- Transformación de imágenes
- Cambiar enormemente el aspecto de una imagen
- Efectos de mapeo de imagen
- Efectos de lente, cristal y ondulación
- Desenfoque y enfoque
- Desenfoque, enfoque y sombras
- Morfología
- Usar el vecindario de píxeles
- Convolución
- Procesado de vecindario con media ponderada
- Transformada de Fourier
- Modificar imágenes en el dominio de la frecuencia
- Antialiasing
- Efectos y problemas del antialiasing
- Varios
- Cosas sueltas
- API, scripts y compilación
- Uso en otros entornos
- Uso en Windows
- IM en un PC con Windows
- Desarrollo y errores
- Propuestas de desarrollo nuevas y antiguas, y errores
Ejemplos de uso de ImageMagick — Introducción
Qué es ImageMagick (resumen sin tapujos)
ImageMagick está diseñado para el procesado por lotes de imágenes. Es decir, permite combinar operaciones de procesado de imagen en un script (shell, DOS, Perl, PHP, etc.) y aplicarlas a multitud de imágenes, o usarlo como subsistema de otra herramienta, como aplicaciones web, herramientas de procesado de vídeo o generadores de panoramas. No es un editor de imágenes con interfaz gráfica.
ImageMagick es, ante todo, un conversor de imagen a imagen. Para eso fue diseñado originalmente: convierte casi cualquier formato de imagen (díganos si hay alguno que no pueda) a cualquier otro formato de imagen.
Pero al mismo tiempo es también una biblioteca de algoritmos de procesado de imágenes. Se puede acceder a ellos desde la línea de comandos y desde scripts de shell/DOS (lo que muestran estas páginas de ejemplos), o desde numerosos lenguajes de programación como C, C++, Perl, Ruby, PHP, etc. Consulte la API de ImageMagick.
La velocidad no es la principal virtud de IM; más bien se prioriza la calidad de las imágenes que genera. Aun así, esto no significa que no pueda convertir imágenes en un tiempo razonable; simplemente no es asombrosamente rápido. Por eso IM puede tardar bastante en determinados procesos, sobre todo al intentar comprimir hacia formatos de imagen de capacidad limitada.
Lo que ImageMagick maneja principalmente son imágenes en forma de matriz rectangular de píxeles (lo que se suele llamar «ráster»). También puede manejar formatos de imagen «vectoriales» como Postscript o PDF, pero con el coste de convertirlos a ráster al leerlos y de generar, al guardarlos, un envoltorio vectorial alrededor del ráster. Como consecuencia, las imágenes vectoriales tienden a tratarse de forma inadecuada con la configuración predeterminada. No obstante, ciertas opciones pueden mejorar esta situación. Consulte Unas palabras sobre los formatos de imagen vectoriales.
Acerca de estos ejemplos de uso de ImageMagick
Estas páginas son el desarrollo y la continuación de mi colección de trucos y consejos de ImageMagick, que empecé a escribir en 1993 y coloqué en la entonces nueva World Wide Web, aparecida justo por aquel entonces. En ese documento todavía queda información sobre muchos aspectos de IM que no está incluida en estas páginas. Sin embargo, mientras que esta página está pensada para ser vista por otras personas, aquella colección de consejos era solo un recordatorio para mí mismo. Por eso, en algunos lugares puede resultar ambigua o desordenada. Quedan invitados a curiosearla, aprender de ella y enviar comentarios.
Otros ejemplos se han extraído o desarrollado a partir de las respuestas a preguntas de usuarios en los foros de IM, o se han aportado como soluciones a diversos problemas.
Espero con interés las sugerencias y los correos de otros usuarios de IM. Esos mensajes suelen conducir a la mejora y ampliación de estas páginas de ejemplos.
El entorno de la línea de comandos
Todos los ejemplos están escritos suponiendo el uso de scripts de BASH en sistemas UNIX, en particular GNU/Linux. Por eso, algunos ejemplos usan el bucle «for-do» del shell. Muchos ejemplos colocan una barra invertida «\» al final de la línea para continuar el comando en la línea siguiente. Los comandos largos se dividen en varias líneas para resaltar los pasos que se aplican.
No obstante, con pequeños cambios en el tratamiento de ciertos caracteres, estos ejemplos pueden usarse también desde un script por lotes de PC Windows. Con ligeros ajustes, también pueden ejecutarse directamente desde una llamada a «system» dentro de un script de PHP.
Para más detalles sobre el uso de los comandos de ImageMagick en estos entornos alternativos, consulte Uso en Windows y API y scripts. Se agradecen las aportaciones y los ejemplos de prueba.
PerlMagick y otras API
Todos estos ejemplos deberían poder adaptarse también para usar la API de IM desde lenguajes como Perl, C, C++, Ruby, PHP, etc. Se recomienda probarlo primero en la línea de comandos hasta que funcione correctamente, y luego convertir la operación a la API concreta que se esté usando.
La situación mejoró mucho en IM versión 6, pero la línea de comandos en realidad solo maneja una secuencia de imágenes a la vez. Sin embargo, la API no tiene esta limitación, y puede manipular varias secuencias de imágenes por separado o en conjunto para realizar procesos más complejos. Esta capacidad facilita implementar estos ejemplos mediante la API de IM y elimina la necesidad de guardar archivos temporales de imagen, algo necesario en muchos de los ejemplos de la línea de comandos. Al usar la API, solo hay que guardar en disco las imágenes permanentes o semipermanentes.
En esencia, conviene usar las páginas de ejemplos como punto de partida para saber qué se puede hacer con ImageMagick, montar primero en la línea de comandos lo que se quiere hacer y, después, trasladarlo a un script o código de API que sea más difícil de modificar.
Además, se recomienda comentar el código de la API de forma abundante y, en lo posible, incluir junto a él el equivalente en línea de comandos de lo que se intenta hacer. Así podrá cotejarlo y compararlo con los resultados obtenidos en la línea de comandos. Esto ayuda a depurar problemas que puedan surgir más adelante, sobre todo cuando se mejore el procesado de imágenes de la biblioteca Core de ImageMagick.
Descarga de imágenes de entrada y resultados
Siempre que es posible, para la entrada de los comandos de ejemplo de IM se usan imágenes integradas en IM (como «logo:» o «rose:»), o se generan las imágenes de entrada con comandos de IM. También es frecuente reutilizar la salida de un comando anterior en ejemplos posteriores. Por eso, normalmente no hace falta descargar imágenes de «prueba» para probar los ejemplos por uno mismo.
Sin embargo, estas imágenes generadas o integradas no siempre resultan convenientes. Por eso, cuando se usan imágenes externas, se procura reutilizar esa imagen de entrada, o el resultado del ejemplo anterior, en los ejemplos posteriores de esa sección.
En algunos casos se muestra la imagen original de origen, mientras que para imágenes grandes se ofrece un enlace a la imagen de origen. Más en general, como la entrada es conocida o evidente, solo se muestra la imagen del resultado final.
Casi todos los comandos de ejemplo de IM que se muestran se han ejecutado dentro del mismo directorio web en el que aparecen. Es decir, el comando que se ve es el que realmente se usó para generar esa imagen. Por eso, cambiando la URL de la página puede descargar o ver las imágenes de entrada que usó el ejemplo. También hay copias de reserva de las imágenes de origen externas en los subdirectorios «images» e «img_photos». Consulte también el ejemplo Fancy Photo Index de esas imágenes.
Cuando un ejemplo genera salida de texto o información de imagen, esta se guarda en un archivo de texto y se genera su imagen para mostrarla en la página web. Al seleccionar la imagen de la salida de texto, se enlaza a una copia del texto que el comando produjo realmente.
En todos estos ejemplos, al seleccionar la imagen de salida debería poder descargar la imagen que el comando de ejemplo creó realmente. Tenga en cuenta, no obstante, que no todos los navegadores entienden todos los formatos de imagen utilizados.
Fuentes de las imágenes externas
Por cierto, la mayoría de las imágenes de origen usadas en estos ejemplos provienen de la Anthony's Icon Library, en particular de las secciones de mosaicos de fondo, clipart grande y dragones de la biblioteca (¡me gustan los dragones!). Nota: estas páginas pueden estar fuera de línea a veces, porque el sitio web se está migrando gradualmente a un nuevo servidor.
Esta biblioteca es, de hecho, anterior a la WWW. La creé en 1991 porque escaseaban las imágenes de iconos buenas y limpias para usar en el sistema X Window. La aparición de la WWW cambió las cosas, por supuesto, pero mi biblioteca original sigue existiendo y, aunque no crece de forma activa, sigue disponible como fuente de imágenes.
Algunas imágenes concretas, o partes de imágenes más grandes, las aportaron los autores de los ejemplos individuales. Esos autores aparecen mencionados en la sección de aportaciones o al pie de la página.
Si busca una imagen concreta, le recomiendo encontrar una adecuada con la búsqueda de imágenes de Google (o similar). Por supuesto, puede convertir y redimensionar esas imágenes con IM para sus propios fines. Eso sí, tenga en cuenta los derechos de autor si planea un uso comercial.
Imágenes PNG en las páginas web
En muchos ejemplos se usan imágenes en formato PNG, como la que se muestra a la derecha de este texto. El formato de imagen PNG admite imágenes con píxeles semitransparentes, una funcionalidad que casi ningún otro formato de imagen ofrece. Además, es un formato muy bien comprendido, disponible en la mayoría de los programas de imagen y navegadores web actuales.
Sin embargo, algunos navegadores web no manejan correctamente las imágenes PNG transparentes (en especial Microsoft Internet Explorer v6). Por eso, en general uso los formatos JPEG y GIF para las imágenes en la web, y solo recurro al formato PNG cuando genero imágenes con píxeles semitransparentes o cuando un ejemplo posterior necesita colores exactos.
Para que el navegador IE v6 muestre imágenes PNG, uso una «hoja de estilos» especial con un JavaScript complejo. Al respecto, consulte PNG transparente para IE. Técnicamente, este es un problema solo de IE, no de ImageMagick.
Mostrar imágenes en pantalla
También pueden surgir problemas de visualización al mostrar imágenes en pantalla. Por eso recomiendo usar un comando como el siguiente, que dispone debajo de la imagen un patrón de «checkerboard» (tablero de ajedrez) para hacer resaltar los píxeles transparentes y semitransparentes.
magick composite -compose Dst_Over -tile pattern:checkerboard image.png x:
La imagen que se muestra en el ejemplo anterior es una imagen de prueba en un formato PNG especial generada con un script de shell. Normalmente este comando envía el resultado a su pantalla, no a una página web como esta.
Si se fija bien, verá el tablero de ajedrez a través de los colores semitransparentes. Pero la imagen en su conjunto es completamente opaca. Por eso, esta técnica debería funcionar en todas las pantallas, navegadores web y visores de imágenes.
Desde IM v6.0.2, el programa «magick display» hace algo parecido de forma automática. No obstante, parece que no trata así las imágenes que usan tabla de colores (es decir, GIF). Usando el formato de imagen de salida «x:» como arriba, se puede mostrar la imagen directamente en pantalla sin guardarla. Para más detalles, consulte Mostrar la pantalla de salida.
Uso de fuentes
Las fuentes usadas en estos ejemplos provienen de una pequeña colección de fuentes TrueType que he ido encontrando y guardando para mí mismo a lo largo de los años. Algunas están protegidas por derechos de autor, así que no puedo publicarlas en línea.
Sin embargo, queda invitado a sustituirlas por otra fuente que tenga a mano. Los ejemplos deberían funcionar (con ligeros cambios en el tamaño de la imagen) con cualquier fuente adecuada disponible en su sistema. La fuente «Arial» de Microsoft, o «Times-BoldItalic», funcionará en la mayoría de los sistemas.
Para ver qué fuentes están actualmente disponibles en su versión de IM, ejecute el siguiente comando…
magick -list font
Aviso: cuando no encontraba la fuente solicitada, ImageMagick solía sustituirla en silencio por una fuente predeterminada (normalmente Arial o Times). Hoy sigue haciéndolo, pero ahora muestra un aviso. Pruebe la fuente de antemano para asegurarse de que es la que pretendía y no la predeterminada.
En mi sistema Linux, uso un script especial de Perl, «[**imagick_type_gen**](../static/img/scripts/imagick_type_gen)», para generar un archivo «type.xml» que guardo en el subdirectorio «.magick» de mi directorio personal. ImageMagick busca las fuentes usando ese archivo, que contiene una lista de fuentes en formato XML. Este script «locate» (localiza) y describe todas las fuentes disponibles en el sistema (si acaba de añadir fuentes nuevas, ejecute antes «updatedb»). Con esta configuración basta con indicar el nombre de la fuente que se quiere usar, sin necesidad de la ruta completa al archivo de fuente concreto.
Por ejemplo…
# En lugar de usar el comando siguiente…
magick -font $HOME/lib/font/truetype/favorite/candice.ttf \
-pointsize 72 label:Anthony anthony.gif
# se puede usar una etiqueta de fuente más simple…
magick -font Candice -pointsize 72 label:Anthony anthony.gif
Antes de IM v6.1.2-3, el archivo «
type.xml» se llamaba «type.mgk». Téngalo en cuenta si usa un IM más antiguo.
Las fuentes usadas en estos ejemplos de IM se listan en el ejemplo de montaje de fuentes de ejemplo. Mi favorita personal es Candice, así que se usa con bastante frecuencia.
Si le gusta la fuente «
Candice», u otras fuentes que uso, puede obtenerlas en Free Fonts o 1001 Fonts .com.
Actualización de las páginas de ejemplos
Estas páginas de ejemplos están en un ciclo de mejora continua. En general, cuando mi interés se dirige a otra cosa, las adiciones a las páginas pueden detenerse durante largos periodos.
Estos ejemplos suelen reconstruirse con la última versión beta de IM, para que pueda comprobar los cambios y errores que puedan aparecer en cada versión de IM antes de su lanzamiento general. No obstante, las imágenes de ejemplo que se muestran son las que el comando de IM indicado generó en mi sistema. Si obtiene resultados distintos, es probable que su IM sea una versión mucho más antigua (con errores antiguos) o que no esté instalado correctamente.
Por cierto, los correos que me envía, así como los debates sobre ImageMagick en el foro de discusión, suelen conducir a la adición de ejemplos nuevos o de secciones enteras a estos ejemplos. Cuanta más discusión haya, mejores serán los ejemplos.
Si está haciendo algo interesante con IM, no dude en compartirlo y déjeme ofrecer un ejemplo de su técnica al resto de la comunidad de IM. Algunos de los mayores avances en el uso de IM han surgido de usuarios como usted.
Agradecimientos especiales
Un agradecimiento especial a Cristy, que durante meses trabajó sin descanso en actualizaciones y correcciones de errores, y aguantó mis disparatadas propuestas… sobre todo mis grandes propuestas relativas al procesado en la línea de comandos, los paréntesis, los operadores de secuencias de imágenes y el procesado de animaciones GIF.
Ha hecho un trabajo magnífico al convertir la versión 7 en el mejor programa de procesado de imágenes en línea de comandos, y el más avanzado, que existe. La mayoría de los usuarios no se lo agradecerán, pero yo sí valoro de verdad el esfuerzo que ha dedicado a IM.
Gracias también a Gabe Schaffer, que me ayudó mucho con los debates sobre el formato y la biblioteca JPEG, el operador de matriz afín y, en general, sobre Magick Vector Graphics.
A Glenn Randers-Pehrson, que escribió el módulo del codificador PNG y se interesó por la reducción de color y el tramado. Fue él quien añadió por primera vez el tramado «halftone» a IM, que yo después revisé y amplié, agregando nuevos tramados al archivo de configuración de tramado ordenado.
Y, por último, gracias a la enorme cantidad de personas con problemas, sugerencias y soluciones que, por lo general, merodean por el foro de usuarios de IM. Muchas de ellas figuran ahora, a lo largo de todo IM Examples, como contribuyentes de ideas y sugerencias.
Gracias también a quienes responden con regularidad a las preguntas del foro. Por ejemplo, «Bonzo» y su sitio web RubbleWebs, que detalla cómo usar los comandos de IM desde scripts de PHP. También «scri8e» y su sitio web Moons Stars, sobre el manejo de destellos y estrellas. Y un agradecimiento a Pete «el_supremo».
Un agradecimiento especial a Fred Weinhaus. Investigador del procesado de imágenes desde sus albores, me ayudó enormemente con la implementación inicial del operador general de distorsión de imagen. Los scripts de ImageMagick de Fred pueden verse en Fred's ImageMagick Site, y a menudo sirven de prueba de concepto para futuras incorporaciones a IM.
A Nicolas Robidoux, experto en procesado digital de imágenes, que rehízo el remuestreo por media ponderada elíptica y mejoró enormemente la salida de la distorsión general de imagen.
Y, por último, a los muchos usuarios de ImageMagick que, en los foros y en la web, me permitieron mostrar a otros los comandos de IM que usaron como parte de algún proyecto. La disposición y la franqueza con que comparten sus descubrimientos son dignas de elogio.
Y ahora, «basta de palabrería», vamos a ver algunos ejemplos.
![[IM Output]](../static/img/images/test.png)
![[IM Output]](../static/img/test_undertile.jpg)