⚠️ Este es un sitio de traducción no oficial, sin relación con ImageMagick Studio LLC. Para información autorizada, consulte la página original (https://usage.imagemagick.org/index.html).

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

[IM Output]

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:

[IM Output]

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.