⚠️ 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/formats/index.html).

Ejemplos de ImageMagick -- Formatos de Imagen Comunes

Prefacio e Índice de los Ejemplos de ImageMagick
Breve Resumen de los Formatos de Archivo de Imagen Comunes
Formato de Archivo de Imagen GIF

Breve Resumen de los Formatos de Archivo de Imagen Comunes

Para una introducción a la lectura y escritura de formatos de imagen, consulta Formatos de Archivo de Imagen. Mientras que una lista de todos los formatos de archivo de ImageMagick se ofrece en la Página de Formatos de Imagen de IM. Aquí tienes un resumen muy rápido de los formatos de archivo de imagen 'normales' más comunes, así como sus ventajas y desventajas generales…

GIF
Este formato es extremadamente común y existe desde hace tanto tiempo que todos los programas de manejo de imágenes lo entienden. Pero solo usa un número limitado de colores (una tabla de 256 colores) y solo guarda con calidad de 8 bits. Sin embargo, su codificación run-length incorporada le permite guardar muy eficientemente imágenes con solo unos pocos colores. Aunque el formato tiene transparencia, solo entiende la transparencia booleana (activada/desactivada) y, en consecuencia, sufre de 'aliasing' o 'dientes de sierra'. El texto plano con líneas finas queda muy mal cuando se guarda como imagen GIF transparente. La única solución a este problema es ligar la imagen GIF a un fondo específico de la página web en la que se usa. El formato GIF puede guardar múltiples imágenes para formar una secuencia de animación y, con este fin, también guarda el tamaño del lienzo de la imagen y la información de desplazamiento (página). Nota sin embargo que los desplazamientos negativos no están soportados, y los intentos de hacerlo restablecen ese desplazamiento a cero. Se usa mejor para imágenes pequeñas de dibujos animados, dibujos lineales e iconos pequeños, todos los cuales tienen colores limitados y permiten que comprima bien. Su uso, sin embargo, debe evitarse cuando hay disponible un formato más nuevo como PNG.
JPEG
No maneja la transparencia en absoluto. La imagen es equivalente a usar la operación "[-alpha off](https://imagemagick.org/command-line-options/#alpha)" para eliminar el canal alfa, así que cualquier transparencia de fondo comúnmente se vuelve negra según el procesamiento de imagen usado para generar la imagen. Este formato también es 'con pérdida', produciendo efectos de borde en líneas y bordes nítidos y, por tanto, no debe usarse para ningún procesamiento de imagen intermedio ni para almacenar originales de imagen (a menos que ya estuvieran en este formato). Es muy adecuado para el almacenamiento a largo plazo de fotografías de la vida real, pero evítalo si planeas seguir procesando la imagen, o si la imagen contiene grandes áreas de colores sólidos.
PNG
Este formato pretende reemplazar finalmente formatos más antiguos como GIF y TIFF. Es un formato moderno capaz de manejar calidad de 16 bits con cuatro canales de color, permitiendo el uso completo de colores semitransparentes. También incluye una enorme cantidad de opciones de compresión de imagen sin pérdida. Su mayor desventaja es que todavía es relativamente nuevo, de modo que el navegador web Microsoft IE (v6) no lo maneja correctamente de forma automática. Sin embargo, hay disponible una corrección para este problema. El formato no guarda la información del tamaño del lienzo (donde GIF sí lo hace), pero sí guarda los desplazamientos del lienzo e incluso los desplazamientos negativos (cosa que GIF no hace), aunque algunos navegadores web tienen problemas cuando se usa un desplazamiento negativo, así que no se recomienda para una imagen final que se vaya a mostrar en un navegador. Para guardar imágenes 'en capas' intermedias, la capacidad de guardar desplazamientos negativos puede ser muy importante y a menudo lo es mucho más que el hecho de no guardar la información del tamaño del lienzo.
MNG
Este es el formato multiimagen de PNG, y permite animaciones a niveles y velocidad de calidad de película. Se busca un ejemplo simple de uso de MNG, así que si tienes uno mándamelo por correo. El formato de animación MNG parece estar quedando obsoleto y ha sido abandonado por algunos navegadores web como FireFox.
TIFF
Este es el formato de intercambio de imágenes que se desarrolló para transferir imágenes de alta calidad entre programas antes de que existiera ningún formato de imagen serio. Desafortunadamente, debido a este origen, el formato ha sido modificado con un conjunto desordenado de características y estilos de compresión, y ningún programa los entiende todos. El formato ahora prácticamente solo lo usa "[Photoshop](http://www.adobe.com/products/photoshop/)" en plataformas windows, y esta es la única fuente que proporciona algún tipo de referencia estándar para el formato de imagen TIFF. Los archivos TIFF pueden manejar múltiples imágenes, aunque pocas aplicaciones aparte de IM manejan TIFF multiimagen. En general, a menos que el formato interno de la imagen TIFF se mantenga relativamente básico, no hay garantía de que un archivo TIFF generado por un programa sea utilizable por otro programa, incluido IM o incluso el propio "[Photoshop](http://www.adobe.com/products/photoshop/)". Por ello, ¡no recomiendo este formato en absoluto! Sugiero que uses algún otro formato distinto de TIFF (o JPEG), especialmente para el almacenamiento a largo plazo de imágenes. Las pocas notas que tengo sobre este formato y sus problemas se ofrecen más abajo en la sección Formatos Misceláneos, TIFF. Estas notas de uso se encontraron en las listas de correo y foros de IM, ya que yo mismo no uso ni necesito usar TIFF.
Formatos de Vídeo
Otros formatos de animación de calidad de película generalmente se basan en usar compresión con pérdida para reducir el tamaño (y la calidad) de la película. Ambos formatos están en un estado de cambio constante, con mejoras y características que limitan la seguridad, lo que dificulta cualquier forma de procesamiento. En el último recuento había más de 200 'códecs' de formato de vídeo en uso general para uno u otro propósito. Debido a esto, IM no maneja este formato directamente, sino que depende de otros paquetes de software para manejar el procesamiento de los fotogramas individuales hacia y desde las animaciones. Estos programas 'delegados' incluyen "mpeg2decode", "mpeg2encode" y "mplayer". Consulta MPEG, M2V y AVI más abajo.

| Algunos sistemas (como ubuntu) deshabilitan el uso de formatos de archivo de imagen específicos mediante una política de seguridad. Escribe magick -list policy para ver qué políticas hay y desde dónde se establecen en tu sistema.
---|---


Formato de Archivo de Imagen GIF

El formato GIF es un formato de archivo de imagen muy ampliamente conocido, ya que existe desde hace muchísimo tiempo (desde finales de la década de 1980). A menudo se elige para imágenes que se van a mostrar en páginas web que implican transparencia o animación de imágenes. También es prácticamente el único formato comprendido de forma absolutamente universal por todos los navegadores web. Desafortunadamente no es un formato muy bueno para nada que no sean dibujos lineales, figuras, diagramas y dibujos animados. Esto es porque está limitado a un máximo de 256 colores, uno de los cuales suele marcarse como transparente. Marcar un color específico de la imagen como transparente tiene algunos inconvenientes. Si el color elegido como transparente está mal escogido, puede provocar que otras partes de la imagen se vuelvan transparentes cuando no se pretendía. Hay que tener cuidado para asegurarse de que eso no ocurra. Además, la capacidad de transparencia es 'booleana', lo que básicamente significa que está completamente activada o completamente desactivada. Los colores semitransparentes simplemente no son posibles y, si están presentes, deben hacerse transparentes u opacos. Eso significa que el formato no puede proporcionar ninguna forma de suavizado de los bordes de una imagen, lo que normalmente da como resultado un mal caso de 'dientes de sierra'. (Consulta Suavizado (Anti-Aliasing)) Debido a que las limitaciones de color del formato de imagen "GIF" causan tantos problemas, especialmente desde un paquete de procesamiento de imágenes de alta calidad como ImageMagick, me gustaría decir de entrada…

Evita el formato GIF en la medida de lo posible.
Si debes usarlo, hazlo solo como paso final.

Finalmente, durante mucho tiempo el algoritmo de compresión usado por GIF estuvo patentado. En consecuencia, no estaba disponible para su uso por muchos programas de procesamiento de imágenes, como ImageMagick. Por ello, los programas IM muy antiguos generaban imágenes en formato GIF sin comprimir y, por tanto, usando más espacio en disco del que deberían. Puedes corregir esto usando un programa de compresión por lotes de GIF como "**[Gifsicle](http://www.lcdf.org/gifsicle/)**" o "**[InterGIF](http://utter.chaos.org.uk/~pdh/software/intergif.htm)**". Sin embargo, como la patente expiró completamente a mediados de 2004, la versión actual de IM tiene reactivada la compresión de imágenes GIF. La compresión de imágenes también es bastante simple, y funciona mejor en imágenes con grandes áreas de colores sólidos e invariables. O en patrones simples y repetidos del mismo conjunto de colores, como los que obtienes usando Tramado Ordenado (que no es el tramado por defecto en IM). Finalmente, las imágenes GIF pueden guardar múltiples imágenes en un solo archivo. Y esto se usa para generar Animaciones GIF, tal como las entienden prácticamente todos los navegadores web, ya que la técnica fue introducida por primera vez por el muy antiguo navegador "Netscape". En Resumen El formato de archivo de imagen GIF, con su tabla de colores limitada, su transparencia booleana y su compresión simplista (si está habilitada), lo hace ideal para imágenes pequeñas, como miniaturas, y especialmente para iconos, logotipos y símbolos de aspecto 'caricaturesco' con grandes áreas de colores sólidos. Sus capacidades de animación también lo convierten en un método ideal para generar logotipos y anuncios llamativos que atraen la atención y que ves por toda la World Wide Web. Para cualquier otra cosa, sus limitaciones lo convierten en un formato de archivo de imagen pobre y quizá te convenga más pasar a JPEG, PNG o un formato de imagen de vídeo para tus necesidades.

Tabla de Colores Limitada de GIF

FUTURE: color reduction examples -- reference basic color dithering
Ensuring that a specific color is present in the final GIF image
Map color tables to color reduce.
See [Color Quantization](quantize.html#colors).

Consulta Scripting Avanzado de Viñetas 3-D para un ejemplo de generación de múltiples imágenes sobre un rango de colores. Esta técnica también se puede usar para convertir automáticamente tu imagen en múltiples imágenes para muchos colores y patrones de fondo diferentes.

Color de Transparencia de GIF

Por ejemplo, aquí usamos identify para extraer el color transparente y la tabla de colores que un archivo de imagen GIF particular usó para representar la transparencia. El script perl extrae solo los campos específicos de interés (que pueden ser multilínea). | |

  magick identify -verbose hand_point.gif |\
      perl -0777 -ne 's/^  //gm; \
            print $& while /^(Colors|Alpha|Colormap):.*?(?=^\S)/gms'

[IM Output]
| [IM Output]


Como puedes ver, para esta imagen se usó un color gris transparente ('#CCCCCC00') y este color tiene su propia entrada separada en la tabla de colores. También puedes ver que, aunque esta imagen solo usa 5 colores (uno transparente), la tabla de colores usada es para 8 colores. Eso es porque el formato de archivo GIF solo puede usar una tabla de colores cuyo tamaño es una potencia de 2. Es decir, la tabla de colores siempre tiene 2, 4, 8, 16, 32, 64, 128 o 256 entradas de color. Por ello, las últimas 3 entradas de la tabla de colores no se usan. En realidad, simplemente no se hace referencia a ellas. En algunos casos, estas entradas no usadas pueden no ser las tres últimas de la tabla de colores, y podrían contener de hecho cualquier valor de color. También puedes tener de hecho valores de color duplicados, aunque IM normalmente elimina cualquier entrada de color duplicada si procesa la imagen de alguna manera. A partir de la versión 6.2.9-2 de IM (y en algunas versiones más antiguas), IM preservará la tabla de colores y, más concretamente, el valor del color transparente, siempre que lee, procesa y escribe una imagen GIF. | |

  magick hand_point.gif    -fill white -opaque wheat   hand_white.gif
  magick identify -verbose hand_white.gif |\
      perl -0777 -ne 's/^  //gm; \
            print $& while /^(Colors|Alpha|Colormap):.*?(?=^\S)/gms'

[IM Output]
| [IM Output]


Como puedes ver, aunque la imagen fue modificada (todos los píxeles de color 'wheat' se reemplazaron por un color 'white'), el color transparente usado se preservó. Sin embargo, si la imagen final no tiene transparencia, la entrada del color de transparencia ('Alpha:') de la tabla de colores se elimina por completo. | |

  magick hand_point.gif   -background white -flatten    hand_flatten.gif
  magick identify -verbose hand_flatten.gif |\
      perl -0777 -ne 's/^  //gm; \
            print $& while /^(Colors|Alpha|Colormap):.*?(?=^\S)/gms'

[IM Output]
| [IM Output]


Si quieres cambiar el color transparente que está usando el formato de archivo GIF, puedes usar el ajuste de salida "[-transparent-color](https://imagemagick.org/command-line-options/#transparent-color)" (añadido en IM v6.2.9-2). Por ejemplo… | |

  magick hand_point.gif -transparent-color wheat  hand_wheat.gif
  magick identify -verbose hand_wheat.gif |\
      perl -0777 -ne 's/^  //gm; \
            print $& while /^(Colors|Alpha|Colormap):.*?(?=^\S)/gms'

[IM Output]
| [IM Output]


Como puedes ver, aunque el resultado no es visiblemente diferente del original, el color transparente se cambió a una versión completamente transparente del color 'wheat'. Si miras de cerca, también verás que la imagen ahora tiene dos colores 'wheat', o '#F5DEB3', en su tabla de colores. Es decir, un wheat transparente y un wheat opaco. A partir de la versión 6.2.9-2 de IM, esto no presenta ningún problema. Aunque el formato de archivo de imagen GIF solo puede definir un color transparente. ¿Por qué harías eso? Porque algunos navegadores web y programas gráficos muy antiguos no entienden la transparencia de GIF. Así que esta opción te permite establecer de qué color deben ser las áreas transparentes en esa situación. Las elecciones típicas para el color transparente son 'white' para los navegadores modernos, O más típicamente 'grey75' ('#BFBFBF'), que era el color de página original del navegador web "mosaic". Otras elecciones populares de color transparente son 'grey' ('#BEBEBE') y 'silver' ('#C0C0C0'), que es lo que usó la imagen de la 'mano' de arriba. Esto muestra lo popular que es esa zona específica del rango de colores de la escala de grises para el color transparente. FUTURE: add link to color selection. Antes de IM v6.2.9-2 y de la creación del ajuste de salida "[-transparent-color](https://imagemagick.org/command-line-options/#transparent-color)", IM normalmente guardaba la transparencia de una imagen como el color especial 'none' (negro completamente transparente), lo cual no es particularmente agradable cuando la transparencia falla.
Nota que establecer "[-transparent-color](https://imagemagick.org/command-line-options/#transparent-color)" NO añade ninguna transparencia a una imagen GIF, ni hace que el color especificado se vuelva transparente. Todo lo que hace la opción es especificar qué color debe colocarse en la tabla de colores para el índice de color que se usa para representar los colores transparentes en una imagen GIF. Si quieres cambiar un color específico (exacto) para que se vuelva transparente, usa el Operador de Reemplazo de Color "[-transparent](https://imagemagick.org/command-line-options/#transparent)".

Transparencia Booleana de GIF

Debido a que el formato GIF NO entiende los colores semitransparentes, y como ImageMagick por defecto genera colores semitransparentes como parte de sus Métodos de Suavizado (Anti-Aliasing) normales, cuando guardas una imagen en este formato a menudo saldrá con un aspecto horrible. Por ejemplo, aquí dibujo un simple círculo negro sobre un fondo transparente. También generaré una vista ampliada del borde de las imágenes, para dejar claro lo que está pasando. Primero generaré la salida usando el formato PNG… |

  magick -size 60x60 xc:none -fill white -stroke black \
          -draw 'circle 30,30 5,20' circle.png
  magick circle.png -crop 10x10+40+3 +repage  -scale 600%  circle_mag.png

[IM Output] [IM Output]
Como puedes ver, el borde del círculo de la izquierda, dibujado (en formato PNG), tiene un borde de aspecto muy limpio (aunque ligeramente difuso). Puedes ver los píxeles semitransparentes en su ampliación. Ahora generemos la misma imagen usando el formato de imagen "GIF"… |

  magick -size 60x60 xc:none -fill white -stroke black \
          -draw 'circle 30,30 5,20' circle.gif
  magick circle.gif -crop 10x10+40+3 +repage  -scale 600%  circle_mag.gif

[IM Output] [IM Output]
El resultado es que el círculo tiene efectos de escalera muy marcados a lo largo del borde exterior del círculo, mientras que el interior permanece correctamente suavizado. Básicamente, mientras que el formato PNG puede guardar información de píxeles semitransparentes, GIF no puede. El formato de imagen GIF solo puede guardar un único color transparente puro. En otras palabras…

El formato GIF tiene una transparencia activada/desactivada o booleana

Si miras más de cerca el GIF resultante, encontrarás que los píxeles semitransparentes podrían haberse vuelto completamente transparentes o completamente opacos. | _Lo que ImageMagick hace realmente con los píxeles semitransparentes depende de qué versión de IM estés usando. Durante mucho tiempo no estuvo bien definido, y lo que hacía una versión a menudo dependía de la última 'corrección de error' que se aplicó debido a los informes de errores de los usuarios.

A partir de v6.2.9-6, ImageMagick debería por defecto aplicar un umbral a la imagen a un nivel del 50% tanto para los formatos de imagen GIF como XPM. Esto se ha convertido en el estándar aceptado tal como lo usan los manejadores de imágenes, sin dejar de permitirte establecer tus propios métodos para lidiar con los problemas de transparencia del formato de archivo GIF.
---|---
| _Debido a las limitaciones de GIF, IM realiza el siguiente conjunto de operaciones antes de guardar al formato de archivo GIF...

_-channel A -threshold 50%
    si hay píxeles (completamente) transparentes presentes, entonces...
      -quantize transparent -colors 255
    de lo contrario, si no hay píxeles transparentes presentes...
      -colors 256_

_El proceso de cuantización de -colors automáticamente no hace nada si hay menos colores que esa cantidad presentes en la imagen. Tampoco hará nada si la imagen tiene un mapa de colores válido (como el asignado por "+/-map").

Tampoco intenta usar un mapa de colores común para los archivos GIF multiimagen. Por ello, si los colores son muy diferentes de un fotograma al siguiente, se puede añadir una tabla de colores local a cada imagen individual guardada en el formato de archivo GIF.

Además, los ajustes usados arriba no son permanentes, solo temporales para la imagen que se está guardando. Es decir, si usaste "-write image.gif", los ajustes usados durante el proceso no afectan a operaciones posteriores._
---|---
Quizá quieras aplicar el umbral tú mismo, y esto se recomienda si no estás seguro de qué versión de IM (especialmente versiones antiguas) estás usando. |

  magick -size 60x60 xc:none -fill white -stroke black \
          -draw 'circle 30,30 5,20' \
          -channel A -threshold 50%  circle_threshold.gif
  magick circle_threshold.gif -crop 10x10+40+3 +repage \
          -scale 600%   circle_threshold_mag.gif

[IM Output] [IM Output]
El ejemplo anterior realiza el mismo "[-threshold](https://imagemagick.org/command-line-options/#threshold) 50%" sobre el canal alfa que IM ahora hace automáticamente; es decir, si un píxel es más del 50% transparente, se hará completamente transparente (usando el color dado por el ajuste "[-transparent-color](https://imagemagick.org/command-line-options/#transparent-color)" si está definido). Sin embargo, ahora tienes control del nivel de umbral como quieras. Aplicar un umbral del 50% al canal alfa funciona bien para la mayoría de los tipos de imágenes. Especialmente las que tienen un borde simple, pero la técnica falla bastante mal cuando necesitas lidiar con grandes áreas de píxeles semitransparentes. Esto es lo que examinará la mayoría de los siguientes ejemplos de manejo de GIF. Por ejemplo, supongamos que queremos guardar una imagen con una gran sombra semitransparente difusa como esta imagen (en formato PNG)… |

  magick -size 70x60 xc:none -font Candice -pointsize 50 \
          -fill black -annotate +10+45 'A' -channel RGBA  -blur 0x5 \
          -fill white -stroke black -draw "text 5,40 'A'"   a.png

[IM Output]
Si simplemente conviertes (magick) esta letra directamente al formato GIF o incluso usas una operación "[-threshold](https://imagemagick.org/command-line-options/#threshold)" para controlar la transparencia booleana, quedarás muy decepcionado. |

  magick a.png  a.gif
  magick a.png -channel A -threshold 75%   a_threshold.gif

[IM Output] [IM Output]
La primera imagen es un guardado normal al formato GIF que, como puedes ver, aplicó un umbral a los píxeles semitransparentes al '50%'; la segunda imagen recibió un umbral del '75%', permitiendo que más píxeles semitransparentes se volvieran completamente opacos (o visibles). Si solo quieres eliminar todos los píxeles semitransparentes (por ejemplo, la sombra), podrías probar algo como un "-threshold 15%", para eliminar prácticamente todos los píxeles semitransparentes. |

  magick a.png -channel A -threshold 15%   a_no_shadow.gif

[IM Output]
La mayoría de las demás soluciones al problema de la transparencia booleana de GIF consisten en ligar inextricablemente la imagen al color de fondo de la página web en la que reside. Los métodos para hacer esto son complejos y delicados, y es lo que veremos ahora. GIF sobre un fondo de color sólido Lo que realmente nos gustaría es preservar de algún modo el sombreado de los píxeles semitransparentes y suavizados, y aun así mostrarlo bien en la WWW. Para hacerlo, tenemos que ser un poco astutos. La solución típica es hacer coincidir la imagen con el fondo sobre el que vas a mostrarla. Esto es simple de hacer: solo superpón la imagen sobre un fondo del color apropiado, antes de guardarla al formato GIF. Esto elimina la necesidad de cualquier forma de transparencia y todo el asunto deja de ser un problema. Por supuesto, el número limitado de colores sigue siendo un inconveniente, pero a menudo no es un gran problema. |

  magick a.png -background LightSteelBlue -flatten  a_overlay.gif

[IM Output]
¡Mira, casi perfecto! Por supuesto, para que este método funcione correctamente necesitas saber exactamente sobre qué color de fondo se usará la imagen. Además, una vez que hayamos terminado, la imagen no servirá de mucho sobre ningún otro fondo. Un gran sacrificio que hacer. GIF sobre un patrón de fondo Pero ¿y si estás usando algún patrón como fondo, en lugar de un simple color sólido? Podrías intentar posicionar la superposición sobre una copia del patrón de fondo, de modo que el patrón de la imagen resultante coincida con el patrón de la página web. Sin embargo, eso requeriría mucho ensayo y error para conseguir que el fondo de la imagen encaje con la página web. Además, solo podrías garantizar que funcione para un navegador concreto, y entonces solo para esa versión específica del navegador. No es una buena idea para una página web, así que ni te molestes en intentarlo. Yo desde luego no lo haré. En vez de intentar una coincidencia perfecta con el patrón de fondo, simplemente superpongámoslo sobre un color que al menos coincida con el fondo que pretendemos usar. Por ejemplo, superpongamos nuestra imagen sobre un patrón de fondo 'típico' de tipo burbujas. Pero primero necesitamos conocer el color promedio de este fondo. Una forma sencilla de encontrar este color es simplemente escalar la imagen hasta un solo píxel y luego leer el color resultante.

  magick bg.gif -scale 1x1\! -depth 8 txt:-

   [![\[IM Text\]](../static/img/formats/bg_color_avg.txt.gif)](../static/img/formats/bg_color_avg.txt)

Consulta Formato de Texto de Enumeración de Píxeles de IM para más información sobre el formato de salida "txt:" especial usado. Ahora establezcamos la transparencia de fondo de la imagen usando "[-flatten](https://imagemagick.org/command-line-options/#flatten)". |

  magick a.png  -background '#BABBD7' -flatten  a_bg.gif

| | [IM Output]

He configurado la página web para superponer nuestra imagen sobre ese fondo, aunque ese fondo NO forma parte de la imagen en sí. Aunque el color de fondo usado coincidía con el color general del patrón de fondo, todavía tiene un rectángulo muy evidente de color sólido a su alrededor, desprovisto del patrón de fondo. Una solución práctica es declarar el color que superponemos como el color "[-transparent](https://imagemagick.org/command-line-options/#transparent)" en la salida GIF. Al hacer esto eliminamos el 'aspecto cuadrado' de la imagen. Además, añadir un pequeño factor de difuminado (fuzz) mejora el resultado y ajusta la cantidad de espacio que usa el color transparente, del mismo modo que hizo el umbral arriba. |

  magick a.png  -background '#B9BBD6' -flatten \
          -fuzz 5%   -transparent '#B9BBD6'   a_bg_trans.gif

| | [IM Output]

Esto suele ser suficiente para manejar la transparencia en la mayoría de las imágenes GIF, aunque liga la imagen a un color de fondo específico. En esencia, estamos usando la transparencia para establecer una forma de contorno básica de la imagen, en lugar de una verdadera transparencia. Al usar un color para la superposición y la transparencia de GIF de modo que coincida con el patrón de fondo, ya no queda claro exactamente dónde termina la imagen y dónde empieza el patrón de fondo.
Ten cuidado, sin embargo, con el ajuste "[-fuzz](https://imagemagick.org/command-line-options/#fuzz)", ya que con demasiado puedes acabar con que algo más que solo el exterior de tu imagen se vuelva transparente. |

  magick a.png  -background '#B9BBD6' -flatten \
          -fuzz 25%  -transparent '#B9BBD6'   a_bg_overfuzz.gif

| | [IM Output]

También fallará si usaste un color cercano al color de fondo dentro de la propia imagen. Por ello, esta técnica no se recomienda para imágenes generales, sino solo en casos específicos. Para resolver este problema usamos un '[-alpha floodfill](draw.html#alpha)' para establecer las áreas que queremos transparentes. |

  magick a.png  -background '#B9BBD6' -flatten \
          -fuzz 25%  -draw 'fill none alpha 0,0 floodfill' a_bg_none.gif

| | [IM Output]

Ahora, mientras los bordes de nuestra imagen no se 'desborden', podemos usar colores similares dentro de la imagen como nuestro fondo, sin que se nos vuelvan transparentes debido al 'difuminado excesivo'. Por supuesto, si nuestra imagen tiene 'agujeros', entonces esos agujeros también tendrán que tratarse. En ese caso, la 'transparencia difuminada' anterior puede funcionar mejor. ¡Dije que manejar un color de transparencia de GIF es fácil! ¡NO!
Una técnica alternativa, especialmente para imágenes con un borde suavizado nítido, es simplemente añadir un contorno mínimo del color de fondo. Consulta Transparencia de Contorno o Halo.
Eliminar el Color de Fondo... Intentar eliminar un color de fondo específico de una imagen GIF existente no es fácil. Es especialmente difícil si la imagen superpuesta también contiene el color de fondo, ya que entonces no sabes realmente qué es fondo y qué no. La mejor solución es conseguir una copia de la misma superposición GIF sobre dos colores de fondo diferentes y bien conocidos. Con dos imágenes así, puedes recuperar perfectamente la superposición original y todos sus píxeles semitransparentes. Consulta Eliminación de Fondo usando Dos Fondos. Si no tienes dos imágenes así, entonces no puedes recuperar perfectamente la semitransparencia de las imágenes, pero hay técnicas que pueden hacer un trabajo razonable, aunque imperfecto. Para esto, consulta las otras secciones de Eliminación de Fondo.
GIF para fondos no específicos (o Tramado de la Transparencia)

FUTURE: This will move into a more generalise (non-GIF specific), alpha
dithering section.

El mayor problema con lo anterior es que solo funcionaría si conocieras exactamente qué color de fondo, o qué patrón de fondo, se usará con tu imagen. Si no lo conoces, no todo está perdido. Como viste arriba, el umbral no funciona bien para una imagen con un área muy grande de transparencia, como una sombra difusa. Pero otra técnica conocida como tramado sí puede, y NO requiere conocimiento del fondo sobre el que se usará. Básicamente, el tramado limita la transparencia a valores activado/desactivado, creando un efecto de semitransparencia sobre un área mayor usando un patrón de píxeles. En otras palabras, falsea la semitransparencia. Este método se ejemplificó en lo que ahora se conoce como los "Ejemplos de Opossum". Desafortunadamente, estos ejemplos en realidad no daban los comandos que se usaron para generar el ejemplo. Por completitud, intentaré demostrarlos de nuevo aquí. El operador "[-monochrome](https://imagemagick.org/command-line-options/#monochrome)" convierte todos los colores de una imagen en un "tramado de corrección de errores de Floyd-Steinberg" en blanco y negro puros. Sin embargo, como convierte una imagen en escala de grises solo en colores blanco y negro puros, necesitaremos extraer una máscara de canal alfa de la imagen, tramarla y devolverla a la imagen. |

  magick a.png \( +clone -fx a -alpha off -monochrome \) \
          -compose CopyOpacity -composite   a_dither.gif

[IM Output]
De forma similar, hay un par de otros operadores de tramado que se pueden limitar solo al canal alfa usando el ajuste "[-channel](https://imagemagick.org/command-line-options/#channel)" (a diferencia de "[-monochrome](https://imagemagick.org/command-line-options/#monochrome)").

  magick a.png -channel A -ordered-dither   o2x2   a_ordered_2x2.gif
  magick a.png -channel A -ordered-dither   o3x3   a_ordered_3x3.gif
  magick a.png -channel A -ordered-dither   o4x4   a_ordered_4x4.gif

  magick a.png -channel A -ordered-dither  checks  a_halftone_2.gif
  magick a.png -channel A -ordered-dither  h4x4a   a_halftone_4.gif
  magick a.png -channel A -ordered-dither  h6x6a   a_halftone_6.gif
  magick a.png -channel A -ordered-dither  h8x8a   a_halftone_8.gif


  magick a.png -channel A -random-threshold  5x95% a_random_5x95.gif

  magick a.png -channel A -random-threshold  5x70% a_random_5x60.gif

  magick a.png -channel A -random-threshold 50x95% a_random_50x95.gif

  magick a.png -channel A -random-threshold 45x55% a_random_45x55.gif
  magick a.png -channel A -random-threshold 50x50% a_random_50x50.gif

[IM Output] [IM Output] [IM Output]
[IM Output] [IM Output] [IM Output] [IM Output]
[IM Output] [IM Output] [IM Output] [IM Output] [IM Output]

Como puedes ver, "[-ordered-dither](https://imagemagick.org/command-line-options/#ordered-dither)" produce un patrón de colores transparentes y opacos para representar la transparencia general. Esto, sin embargo, produce un patrón regular muy perceptible. No obstante, si usas un color de sombra similar pero más oscuro que el fondo normal, puedes hacer que este patrón sea casi completamente invisible. El patrón 'checks' (primera imagen de la segunda línea) es de particular interés, ya que es un patrón de 3 niveles muy simple que es muy limpio y pulcro. | _"[-ordered-dither](https://imagemagick.org/command-line-options/#ordered-dither)" se amplió en IM v6.2.8-6 con patrones de tramado de 'medio tono'. El operador se revisó después por completo en IM v6.3.0 con patrones de tramado con nombre (usa "[-list](https://imagemagick.org/command-line-options/#list) threshold" para ver la lista completa). Incluso puedes generar tu propio patrón de tramado para generar otros efectos especiales. Consulta Ejemplos de Tramado Ordenado y las notas de Actualización del Tramado Ordenado para más detalles.

Antes de este rediseño, los argumentos solo podían consistir en las cadenas de geometría '2x2', '3x3' y '4x4' (que aún funcionan). Sin embargo, cualquier otra cosa se trataba entonces como un argumento de "[-random-threshold](https://imagemagick.org/command-line-options/#random-threshold)", normalmente con resultados desastrosos. Se requiere precaución al usar esta opción en versiones muy antiguas de IM.
---|---
El "[-random-threshold](https://imagemagick.org/command-line-options/#random-threshold)", por otro lado, produce un tramado aleatorizado muy variable que es diferente cada vez que se ejecuta. Sin embargo, la naturaleza puramente aleatoria de este algoritmo de tramado tiende a producir grandes 'grumos' de píxeles, en lugar del tramado más suave y colocado algorítmicamente que genera el operador "[-monochrome](https://imagemagick.org/command-line-options/#monochrome)" "Floyd-Steinberg". Sin embargo, la gran ventaja de "[-random-threshold](https://imagemagick.org/command-line-options/#random-threshold)" son los controles de límite que proporciona. Al hacer los parámetros muy restrictivos (por ejemplo, como '50x50%'), convertirías "[-random-threshold](https://imagemagick.org/command-line-options/#random-threshold)" en un simple operador "[-threshold](https://imagemagick.org/command-line-options/#threshold)". Siendo solo un poco menos restrictivo, puedes aleatorizar justo el borde mismo del límite del umbral (por ejemplo, usando '45x55%'). | _El argumento 'PxQ' de "[-random-threshold](https://imagemagick.org/command-line-options/#random-threshold)", donde P es el umbral mínimo y Q es el máximo (el símbolo '%' es obligatorio). Así, "5x95%" dice que cualquier cosa por debajo del 5% de MaxRGB se pone a 0, cualquier cosa por encima del 95% se pone a MaxRGB; de lo contrario, elegimos un valor aleatorio entre el 5% y el 95% de MaxRGB como nivel de umbral a usar para ese píxel. Un argumento con valor "5x95%" es probablemente el mejor valor a usar en la mayoría de las situaciones.

---|---
Puedes mejorar el aspecto final usando un color de medio tono más oscuro (como un gris oscuro) en lugar de negro para el color de sombra. Al hacer esto, el color tenderá a fundirse más con el fondo, haciendo el tramado menos pronunciado que lo mostrado arriba. Si sí conoces aproximadamente cuál es el color de fondo, puedes incluso usar un color más oscuro de ese tono para que la sombra se integre mejor sin restringirte al tono de fondo específico. Algo así como mezclar un poco los dos métodos para mejorar el resultado general. Básicamente, cuanto más trabajo dediques a lo que quieres hacer, mejor será el resultado.

FUTURE: dither example with a dither color matching the light blue background
of this web page.
Procesamiento de GIF sin ImageMagick giftrans Lista todos los atributos y la tabla de colores de la imagen GIF. También puede establecer un índice de color específico como color transparente sin modificar el orden de la tabla de colores de las imágenes, ni fusionar índices de color que contengan el mismo color (no una situación recomendada). He comprobado que el comando "magick identify" de IM hace un mejor trabajo listando los atributos de la imagen, incluido el 'límite de repetición del bucle' en la "Extensión de Aplicación Mosaic" usada en las animaciones de imagen. Consulta también el script "gif2anim" (más abajo), que antes usaba este programa para extraer los metadatos de la imagen GIF necesarios para recrear el GIF a partir de los 'fotogramas' individuales extraídos. Ahora solo usa "magick identify" para extraer estos metadatos.
GIFsicle Este es un programa optimizador de imágenes de propósito general, cuyo propósito original era volver a añadir compresión a las imágenes GIF en una época en que ese algoritmo todavía estaba bajo derechos de autor. El programa también se puede usar para añadir comentarios, crear animaciones GIF y también optimizar dichas animaciones del mismo modo que lo hace el operador "[-deconstruct](https://imagemagick.org/command-line-options/#deconstruct)" de IM, aunque con optimizaciones de transparencia adicionales como la Optimización de Compresión LZW.
InterGIF Un programa similar a GIFsicle, diseñado para procesar GIF animados. Sin embargo, solo proporciona la Optimización de Compresión por Transparencia. No obstante, otras características pueden ser útiles. Mándame tu opinión por correo.
gif2anim Un script de shell que toma un archivo de animación GIF y extrae todas las imágenes de fotograma individuales, así como un archivo ".anim" que contiene todos los ajustes "magick de IM necesarios para reconstruir la animación a partir de las imágenes de fotograma extraídas.
anim2gif El inverso del script anterior, que toma un archivo ".anim" que contiene todos los ajustes "magick de IM y reconstruye una imagen de animación GIF. Este script es muy útil para estudiar, editar, ajustar y fusionar archivos de animación GIF. Para el uso básico, consulta Información de Lista de Animación. Consulta también Anexar Animaciones (sincronizadas en el tiempo) para un ejemplo práctico de su uso.

Manejo de Desplazamientos de Imagen GIF

Aunque el formato GIF guarda imágenes con desplazamientos como parte de su manejo de animación de imágenes, no guardará un desplazamiento negativo. Cualquier intento de guardar un desplazamiento negativo en una imagen GIF hará que el desplazamiento se restablezca a cero. Esto puede ser un verdadero fastidio al diseñar animaciones de imagen GIF. Si al navegador web Internet Explorer se le da una imagen GIF cuyo 'desplazamiento de página' coloca la imagen en algún lugar fuera del 'tamaño del lienzo de página', ignorará el tamaño y el desplazamiento de página y la mostrará como si no tuviera tal desplazamiento. El antiguo navegador web Mozilla, por otro lado, simplemente mostrará el lienzo de la imagen y aplicará los desplazamientos a la imagen. Esto puede dar como resultado que se muestre un lienzo vacío sin datos de imagen presentes, lo cual, aunque correcto, puede ser inesperado. Ambos mostrarán la imagen usando el tamaño del lienzo de página, con el desplazamiento de página apropiado si la imagen está totalmente contenida en ese lienzo de página.

Formatos de Salida de GIF Relacionados

GIF87: Genera la imagen en el formato GIF 87a más antiguo.

Si el navegador web "Mozilla" ve este formato más antiguo, ignorará por completo la geometría de página de la imagen, y no usará un marco de 'página' más grande, ni usará desplazamientos de imagen con la imagen. La versión 6.0.4 de IM y anteriores normalmente producían un formato GIF89a. Pero si la imagen era una animación GIF y se dividía en imágenes separadas usando +adjoin, IM usaba el GIF87a, dando resultados inconsistentes al mostrarse en navegadores web. IM posterior a v6.0.4 siempre producirá un archivo en formato de imagen GIF 89a, a menos que el usuario solicite específicamente el formato de salida "`GIF87:`" más antiguo.

Formato de Archivo de Imagen JPEG

Este formato es casi tan común como el formato GIF anterior. Pero mientras que GIF está diseñado pensando en imágenes pequeñas y simples 'de tipo caricatura', JPEG está diseñado para imágenes grandes de la vida real con muchos colores diferentes y tonalidades de color, como las fotografías. Una característica clave del formato de archivo JPEG es su compresión, que reduce el tamaño de la imagen manteniéndola aceptable para el ojo humano. Este es un proceso muy complejo y queda fuera del alcance de esta discusión. Para más información sobre este proceso y sus efectos, consulta Introducción a la Compresión JPEG. Y una excelente explicación detallada en el vídeo de YouTube JPEG DCT, Discrete Cosine Transform (JPEG Pt2)- Computerphile. Desafortunadamente, para comprimir bien las imágenes, el algoritmo pierde información intencionadamente. Lo que se guarda NO es la misma imagen que la que está en memoria; el color de un píxel o área particular de una imagen generalmente NO será exactamente el mismo color que se guardó. Esto es especialmente cierto cerca de los bordes de los objetos dentro de la imagen. Así que, como rápida advertencia…

IM es un procesador de imágenes ráster general, para modificar imágenes.
No hará modificaciones JPEG sin pérdida.

Si te interesa el manejo sin pérdida, consulta Manejo de JPEG sin IM.
Este comportamiento con pérdida se vuelve aún más perceptible si una imagen JPEG se cambia de modo que la cantidad de cambio en el borde superior o izquierdo no es múltiplo de 8. Cuando esto ocurre, los 'bloques' o 'celdas' de compresión JPEG serán completamente diferentes, y eso puede producir un gran aumento en el tamaño de guardado de la imagen final. Es decir, operaciones como chop, trim, shave, border, frame, extent, etc. (consulta Operaciones de Corte y Bordeado) que pueden desplazar los datos de la imagen por un desplazamiento de píxeles que no sea un 8. Consulta la discusión del Foro de IM Cropping an image result in an unexpected increased file para más detalles.
Normalmente esta naturaleza con pérdida de los datos JPEG no es muy perceptible. Sin embargo, puede volverse perceptible cuando cargas y guardas una imagen JPEG varias veces o usas una calidad muy baja con un diagrama que muestra cambios de color bruscos. No obstante, mientras no cargues ni reutilices imágenes JPEG una y otra vez (preserva y aplica las operaciones desde la fuente original), sigue siendo un buen formato de archivo incluso para tipos de imagen que no se le dan particularmente bien. Como ejemplo de esta naturaleza con pérdida de JPEG, aquí genero una imagen simple de dos degradados anexados juntos. Mientras que los degradados proporcionan un cambio de color suave que JPEG maneja muy bien, el cambio de color brusco entre los dos degradados no se maneja bien.

  magick -size 5x10  gradient: gradient:blue-navy  +append jpg_lossy.gif
  magick jpg_lossy.gif                  jpg_lossy.jpg

[IM Output] [IM Output]

La primera imagen es una vista ampliada de la versión sin distorsión en formato GIF de la imagen (haz clic en la imagen para ver o descargar la vista sin ampliar). Solo contiene 20 colores, así que en este caso el formato GIF puede manejar la imagen perfectamente y de hecho generar un tamaño de archivo muy pequeño (consulta la tabla más abajo). Por otro lado, la versión JPEG de la imagen muestra claras distorsiones de color que la compresión JPEG añadió a la imagen guardada para poder comprimirla mejor. Las distorsiones son mayores en el canal de color azul, lo cual no es sorprendente, ya que el ojo humano no resuelve bien el azul. Es decir, el ojo humano tiende a 'dispersar' los colores azules de forma natural, así que el algoritmo JPEG aprovecha esto (usando internamente un espacio de color YCbCr). De hecho, sin la ampliación usada arriba, te costaría mucho ver el efecto. Veamos el efecto de la calidad sobre la imagen.

  magick jpg_lossy.gif   -quality 100%  jpg_lossy_100.jpg
  magick jpg_lossy.gif   -quality  80%  jpg_lossy_80.jpg
  magick jpg_lossy.gif   -quality  50%  jpg_lossy_50.jpg
  magick jpg_lossy.gif   -quality  20%  jpg_lossy_20.jpg
  magick jpg_lossy.gif   -quality   5%  jpg_lossy_5.jpg

[IM Output] [IM Output] [IM Output] [IM Output] [IM Output] [IM Output]

Si miras de cerca el resultado de la primera imagen anterior, en la que guardamos la imagen de prueba al '100%' o calidad máxima, todavía hay algo de ligera distorsión de color. Es muy difícil de ver, pero está presente. Por otro lado, usar un ajuste "[-quality](https://imagemagick.org/command-line-options/#quality)" progresivamente más bajo para la imagen JPEG hace esta distorsión de color aún mayor y más perceptible. No solo eso, sino que crea una especie de 'sombreado' de los bordes, produciendo 'ondas' de cambios de color que se extienden desde los bordes nítidos. Un efecto comúnmente conocido como Artefactos de Ringing. Sin embargo, la razón para usar compresión es que el tamaño de la imagen resultante es muchísimo más pequeño, al menos inicialmente. Aquí tienes una lista de archivos de los resultados y su tamaño en bytes.

[IM Text]

Nota que la imagen GIF en este caso es muy pequeña, ya que los grandes 'bloques' de color se comprimen extremadamente bien en GIF. A medida que la calidad JPEG baja, el tamaño de la imagen también se reduce. El ajuste de calidad por defecto, cuando no se establece ninguna calidad JPEG, ya sea por el usuario o desde el archivo de formato de la imagen fuente, es de aproximadamente el 92%, que es una calidad muy alta. Sin embargo, usando un ajuste de calidad inferior al '50%', los tamaños de imagen no se reducen mucho en términos de ahorro de tamaño de archivo, solo una imagen mucho más progresivamente degradada. Es un proceso de rendimientos decrecientes. En resumen…

JPEG pierde información, degradando las imágenes al guardarlas.
Usa algún otro formato para las imágenes intermedias durante el procesamiento.
Usa el formato JPEG solo para la imagen final, no para procesamiento posterior.

JPEG tampoco es bueno para imágenes artificiales con cambios de color bruscos, como dibujos lineales, diagramas o iconos de tipo caricatura, texto y símbolos. Tales imágenes con un bajo número de colores se guardan mejor usando un formato de imagen con paleta, como GIF o PNG8. Está empezando a estar disponible un nuevo formato de imagen JPEG, Jpeg2000, que sí permite la compresión JPEG sin pérdida. Sin embargo, esto requiere que también esté instalada la biblioteca 'JasPer'. Para usar este formato especial, también necesitas usar una opción "-compress jpeg2000" o guardar a un formato de archivo JP2, para que IM llame a la biblioteca correcta.

Transparencia JPEG - NO

Aparte de la compresión, el otro problema importante al que se enfrentan los usuarios de JPEG es que

JPEG no guarda la transparencia

Así, aunque puedes superponer imágenes sobre un color o patrón de fondo y guardar a JPEG, no puedes darle a una imagen JPEG un borde de forma libre ni con agujeros transparentes. Como JPEG se diseñó para guardar imágenes del mundo real, y no partes de imágenes, la transparencia no era un asunto que le preocupara cuando se creó el formato. En consecuencia, los diseñadores nunca se preocuparon de incluir un canal alfa, ni otra información de transparencia, en el formato de archivo. Por ejemplo, tomemos el PNG con transparencia que usamos arriba y convirtámoslo (magick) directamente a JPEG.

  magick a.png  a.jpg

[IM Output] [IM Output]

Como puedes ver, todas las partes transparentes simplemente se volvieron negras. Pero según la fuente de la imagen (especialmente las imágenes GIF), las áreas transparentes podrían haberse vuelto igual de fácilmente de algún otro color aleatorio o inapropiado. Si esto pudiera ser un problema, la mejor idea es hacer que IM Elimine la Transparencia Alfa antes de guardar la imagen al formato de archivo de imagen JPEG.

Distorsión de Color de JPEG (en pruebas)

Como se mencionó arriba, el algoritmo de compresión que usa JPEG es con pérdida. Esa imagen se modificará para permitir que se comprima mejor, reduciendo el espacio en disco, con suerte. Exactamente cuánta distorsión de color ocurre depende de los ajustes de calidad usados. Por ejemplo, veamos cuántos colores hay en la imagen "netscape:" integrada de IM… | |

  magick identify -format "Colors: %k" netscape:

| [IM Text]

Como puedes ver, esta imagen tiene por defecto 216 colores en una gran matriz rectangular. Este tipo de imagen NO es una imagen muy buena para guardar al formato JPEG, lo que la hace ideal para nuestros propósitos. Así que veamos el número de colores que produce un guardado de esta imagen como JPEG… | |

  magick netscape: JPG:- |\
     magick identify -format "Colors: %k\nFile Size: %b" -

| [IM Text]

Es decir, por defecto, ¡el archivo JPEG guardado tiene casi 9 veces más colores! Aunque el resultado seguiría pareciéndose a la imagen original, los bordes del área rectangular habrán tenido colores añadidos en sus cercanías. Guardar con el ajuste de máxima calidad no guardará la imagen sin distorsión de color alguna… | |

  magick netscape: -quality 100 JPG:- |\
     magick identify -format "Colors: %k\nFile Size: %b" -

| [IM Text]

Como puedes ver, un ajuste de calidad muy alto solo añadirá unos pocos colores extra, pero la imagen seguirá teniendo una ligera (mínima) distorsión de color. También puedes ver que el tamaño de archivo es mayor, ya que se puede lograr muy poca compresión. Ahora probemos con "Lossless" (sin pérdida)… | |

  magick netscape: -quality 100 -compress Lossless JPG:- |\
     magick identify -format "Colors: %k\nFile Size: %b" -

| [IM Text]

¡Aún hay distorsión de color! Obviamente, mi biblioteca JPEG NO está parcheada para la codificación sin pérdida. Sin embargo, recuerda que solo otra biblioteca parcheada puede leer una imagen JPG sin pérdida así. Como alternativa, recomiendo compilar tu IM para que use la biblioteca JasPer y el más nuevo formato de archivo de imagen JP2. | |

  magick netscape: JP2:- |\
     magick identify -format "Colors: %k\nFile Size: %b" -

| [IM Text]

Como puedes ver, el formato Jpeg2000 cambió a otros métodos de compresión de imagen sin pérdida, pero por defecto no distorsiona el color de la imagen. También aplica algunos métodos de compresión muy alta sobre la imagen. Sin embargo, usar una calidad más baja con el nuevo formato JP2 introducirá de nuevo las distorsiones de color, para generar una imagen más pequeña, igual que el formato de archivo de imagen JPEG normal… | |

  magick netscape: -quality 50% JP2:- |\
     magick identify -format "Colors: %k\nFile Size: %b" -

| [IM Text]

Para más información sobre el uso del codificador JPEG2000, consulta la documentación de parámetros de codificación JPEG2000.

Opciones de Control de Lectura de JPEG

-define jpeg:size={width}x{height} Este ajuste es una pista para la biblioteca de imágenes JPEG para que lea solo lo suficiente del archivo de imagen (JPEG) de entrada para crear una imagen que sea al menos del tamaño dado (ancho × alto) o mayor. Si la imagen de entrada es enorme, esto puede reducir mucho la cantidad de memoria que IM necesita para la lectura de la imagen, ya que IM manejará entonces una imagen más pequeña. Esto, a su vez, puede aumentar drásticamente la velocidad de toda la operación. Recuerda que esto es solo una pista del tamaño de imagen deseado; no se te garantiza obtener este tamaño, solo algo cercano pero mayor que ese tamaño. Normalmente obtendrás algo que está entre este tamaño y uno del doble de grande, preservando la relación de aspecto de las imágenes. Generalmente, tras leer una imagen JPEG con una pista de tamaño, la imagen se redimensiona inmediatamente a su tamaño 'exacto' final. Normalmente usando "[-thumbnail](https://imagemagick.org/command-line-options/#thumbnail)" para eliminar también cualquier perfil de imagen. Por ejemplo...

    magick -define jpeg:size=64x64   jpeg_large.jpg jpeg_size_hint.jpg
    magick -define jpeg:size=128x128 jpeg_large.jpg \
                                   -thumbnail 64x64  jpeg_thumbnail.jpg

| _Antes de IM v6.5.6-0 este ajuste del codificador se extraía del ajuste "[-size](https://imagemagick.org/command-line-options/#size)". Esto causaba problemas cuando los usuarios usaban "[-size](https://imagemagick.org/command-line-options/#size)" para la creación de imágenes pero luego la lectura de JPEG producía resultados inesperados. Por ello, se cambió para que fuera en su lugar un ajuste especial del codificador.

En versiones más antiguas puede que necesites restablecer el ajuste "[-size](https://imagemagick.org/command-line-options/#size)" usando "[+size](https://imagemagick.org/command-line-options/#size) antes de leer imágenes JPEG, o IM podría no leer una imagen JPEG por completo.


---|---
Nota que este modificador hace que la biblioteca JPEG se salte la lectura de columnas y filas enteras de píxeles. Por ello, producirá efectos muy parecidos a los del Operador de Redimensionado por Muestreo, incluidos sus fuertes Artefactos de Aliasing. Debido a esto, se recomienda que especifiques al menos el doble del 'redimensionado' final de la imagen, para evitar este problema, tal como se muestra en el ejemplo anterior. | _Nota que el Operador de Redimensionado de Miniatura también usa la misma técnica de muestreo para operaciones de redimensionado a muy gran escala, para reducir rápidamente el tamaño de la imagen antes de usar una operación de redimensionado normal, aunque a 5 veces en lugar del doble del tamaño final de la imagen. La diferencia de tamaño es una cuestión de calidad final de la imagen.

---|---
+profile '*' -strip Las imágenes JPEG tal como las guardan las cámaras digitales, el software de escaneo y otro software de procesamiento de imágenes como "photoshop" a menudo añaden grandes perfiles de "comentarios de programa " a las imágenes JPEG. Cualquiera de estas opciones eliminará esos perfiles de una imagen, después de que esa imagen se lea. El operador "[+profile](https://imagemagick.org/command-line-options/#profile)" eliminará todos los perfiles de color de una imagen, mientras que "[-strip](https://imagemagick.org/command-line-options/#strip)" eliminará todos los perfiles y metadatos que la imagen pueda tener. Nota también que "[-thumbnail](https://imagemagick.org/command-line-options/#thumbnail)" es una opción "[-resize](https://imagemagick.org/command-line-options/#resize)" que también hará un "[-strip](https://imagemagick.org/command-line-options/#strip)" al mismo tiempo. Consulta también Crear Miniaturas. -type TrueColorMatte Como JPEG no guarda ninguna forma de transparencia, cuando se lee siempre será completamente opaca y no tendrá canal 'alfa' en memoria. Este ajuste forzará a que cualquier imagen JPEG leída después de la opción tenga un canal 'alfa' completamente opaco añadido a la imagen en memoria. La mejor forma de hacer esto, sin embargo, es usar un "[-alpha set](https://imagemagick.org/command-line-options/#alpha)" o "[-alpha](https://imagemagick.org/command-line-options/#alpha) set" después de leer la imagen, ya que tendrá menos impacto en la lectura y escritura de otros formatos de imagen. Consulta Tipo de Imagen al Leer y Escribir y Alpha Set para más información.

Opciones de Control de Escritura de JPEG

Por defecto, el "[-quality](https://imagemagick.org/command-line-options/#quality)" y el "[-sampling-factor](https://imagemagick.org/command-line-options/#sampling-factor)" que se encontraron al leer la imagen JPEG se usan al volver a escribir una imagen JPEG. Esto, sin embargo, puede que no produzca el mismo tamaño de archivo en disco, y aun así siempre tendrás una pérdida adicional de calidad de imagen debido a leer y volver a guardar una imagen JPEG. Las tablas de cuantización JPEG, no obstante, no se preservan.

-quality {percent} Probablemente la opción más importante al guardar imágenes JPEG, ya que controla exactamente cuánto se comprime la imagen al guardarla en disco. El valor no es un porcentaje de tamaño, solo un valor de calidad. Cuanto más bajo el valor, más pequeña la imagen y más información de imagen se pierde, produciendo más artefactos y degradando la imagen.

    FUTURE: VERY low quality example of a photo

NOTA: un ajuste de calidad del '100%' no garantiza guardar una imagen sin ninguna pérdida de calidad, solo una cantidad mínima de pérdida. (Consulta la siguiente opción) NOTA: No puedes determinar una calidad para obtener un tamaño de archivo específico, salvo por ensayo y error. Empieza con un "[-quality](https://imagemagick.org/command-line-options/#quality)" del 75% y comprueba el tamaño de archivo resultante. Si es demasiado grande, reduce la calidad un 10%; si es demasiado pequeño, auméntala. Una vez que tengas una cota inferior y superior de calidad, haz una búsqueda binaria para encontrar una calidad que se ajuste mejor al tamaño de archivo deseado. Un total de cinco o seis intentos debería bastar. -define jpeg:extent={size} A partir de IM v6.5.8-2 puedes especificar un tamaño máximo de archivo de salida para la imagen JPEG. El tamaño se especifica con un sufijo. Por ejemplo "400kb". Funciona generando muchas versiones de la imagen JPEG, haciendo una búsqueda binaria del ajuste de calidad de salida "[-quality](https://imagemagick.org/command-line-options/#quality)", hasta que se acerca lo más posible al tamaño de archivo dado sin superarlo. Hace esto escribiendo la imagen repetidamente en un archivo temporal y, una vez que tiene el tamaño de calidad apropiado, genera la imagen final en el nombre de archivo de salida dado, una sola vez. La salida, por tanto, seguirá funcionando bien al enviar la imagen final a una tubería, o directamente a la red, y no solo a un archivo real. Sin embargo, no esperes que este proceso sea muy rápido debido a los requisitos de E/S. Quizá de 4 a 8 veces más lento. Mándame tus resultados por correo si realmente haces una comparación de tiempos. -compress LossLess Aunque un ajuste "[-quality](https://imagemagick.org/command-line-options/#quality)" del '100%' todavía puede producir colores ligeramente diferentes (sigue siendo 'con pérdida'), la opción "-compress LossLess" pedirá a la biblioteca JPEG que guarde la imagen sin ninguna pérdida de datos. Por ello, al volver a leer la imagen, esta debería restaurarse exactamente como se guardó. ADVERTENCIA: Esto solo funcionará si tu biblioteca JPEG ha sido parcheada para la codificación 'LossLess JPEG', pero el uso del formato de archivo JP2 lo ha reemplazado, así que esta opción rara vez tiene ya algún efecto real. Además, DEBES establecer también "-quality 100%" para que esto funcione. Aunque intuitivamente pensarías que guardar con 'LossLess' significará automáticamente usar una calidad del 100%, no es el caso. Esto es resultado de añadir un parche inusual para la escritura de imágenes JPEG, que es un formato con pérdida por definición. Por supuesto, el archivo generado probablemente será mucho mayor que una imagen JPEG normal. Además, acabarás con un JPEG comprimido sin pérdida que no podrás leer en ningún sitio salvo con una biblioteca JPEG igualmente 'parcheada'. Por ello, el 'JPEG sin pérdida' NO se recomienda y debería usarse en su lugar algún otro formato (como PNG o JP2). -interlace Line Usa un estilo 'Progressive JPEG' que te permite ver imágenes jpeg grandes mientras todavía se están cargando. Consulta también la solución sin IM para volver a codificar un JPEG existente sin más pérdida, más abajo. -sampling-factor {horizontal}x{vertical} Ajusta el factor de muestreo que usa la biblioteca JPEG para el submuestreo de crominancia. Esto se puede establecer en '2x1' para crear archivos de animación MPEG-2. "2x2, 1x1, 1x1" es el método de submuestreo estándar de IM y corresponde a 4:2:0, consulta Wikipedia, Submuestreo de Crominancia. Sin embargo, cuando la "calidad" es 90 o superior, los canales no se submuestrean. Básicamente, definirá si el tamaño del 'bloque' o 'celda' de procesamiento es de 8 píxeles o de 16 píxeles. -density {Xdpi}x{Ydpi} Aunque la densidad no tiene efecto en el tamaño de píxeles de salida de la imagen resultante. El ajuste anterior, sin embargo, se almacena en la cabecera JFIF del formato de archivo de imagen JPEG. Desafortunadamente, algunos programas como Photoshop ignorarán este ajuste si también hay una densidad presente en un perfil específico de photoshop ('8BIM') almacenado en la imagen. La densidad realmente solo es importante cuando se usa un dispositivo de salida, como impresoras o monitores, permitiendo que estos dispositivos muestren la imagen escalada a tamaños del mundo real. Por ejemplo, asegurando que la foto o página que escaneaste se imprima al tamaño correcto. Para más información sobre la densidad, consulta Metadatos de Densidad de Imagen y Redimensionado por Remuestreo. -type TrueColor IM usará automáticamente un formato interno en escala de grises para las imágenes que solo contienen valores de escala de grises. Este ajuste anulará este comportamiento y forzará a IM a producir siempre una imagen JPEG en color en lugar de escala de grises. Consulta Tipo de Imagen al Leer y Escribir para más información. -define jpeg:optimize-coding=false Desactiva el cálculo de tablas de codificación Huffman óptimas para esta imagen. Esto está activado por defecto. Requiere una pasada extra sobre la imagen para hacer los cálculos necesarios, pero esto es mínimo. -define jpeg:q-table={path} Define un archivo que contiene tablas de cuantización JPEG personalizadas, en XML. Una tabla de ejemplo se instala normalmente en "/etc/ImageMagick/quantization-table.xml" pero está integrada en ImageMagick y, por tanto, no se usa normalmente. Se pueden encontrar varias discusiones sobre la generación de tablas en el Digital Image Processing Forum, con discusiones específicas (en el momento de escribir esto) en JPEG Quantization Tables, Better JPEG quantization tables?, Stupid PET Trick qtable of one, JPEG luma quantization table. Esta opción se añadió a IM v6.5.7-8.

Calidad de JPEG frente a Tamaño de Archivo

El tamaño de archivo final de un archivo JPEG para una calidad dada es indeterminado. Todo el proceso de compresión es tan complejo que pequeños cambios producen cambios muy diferentes en la compresión. Es un 'efecto mariposa'. Incluso con la misma imagen fuente y la misma calidad, pero con diferentes versiones de IM, de la biblioteca JPEG, u otros programas de procesamiento de imágenes, obtendrás diferencias muy amplias en el tamaño de archivo y en la calidad observada. Bien puedes tratar el ajuste de calidad como una simple 'conjetura' sobre cuánta compresión o calidad visual debería aplicarse a una imagen concreta. En esencia, es una imposibilidad práctica predeterminar el tamaño de archivo final para una imagen y un ajuste de calidad dados... Salvo haciéndolo de verdad. IM, sin embargo, puede hacer 'ejecuciones de prueba' para descubrir la mejor calidad a usar para un tamaño de archivo concreto usando el 'jpeg:extent' especial. Consulta Controles de Escritura de JPEG arriba. Es extremadamente lento, pero más rápido que una solución casera similar. Hacer esto no se recomienda, y no solo porque sea lento. Con tu método de tamaño de archivo fijo, una imagen simple podría salir a calidad 90%, pero contener 50k de datos innecesarios, mientras que una imagen complicada tendría que bajar a calidad 30% y mostrar artefactos JPEG (o, dicho de forma menos técnica, se vería fatal) debido a la escasez de datos para el detalle presente. La mejor idea es encontrar un único ajuste de calidad que produzca un tamaño de archivo medio de 100KB para una selección razonable de tus imágenes. Aun así, las imágenes con poco detalle pueden salir a solo 50k. Mientras que las imágenes con mucho detalle intrincado pueden salir a 150k, ambas se verán aceptables. Para una guía práctica de la compresión y la calidad JPEG, consulta Optimization of JPEG compression settings. Consulta también JPEG Compression, Quality and File Size para una mirada a los detalles internos de JPEG. Consejo de Photoshop: Photoshop añadirá unos 4 Kbytes de información extra a las imágenes JPEG para guardar vistas previas e información de gestión de color (perfil '8BIM'). Si no quieres esa información, usa la función 'Save for Web'. Este consejo se encontró en un artículo sobre compresión JPEG de Gernot Hoffmann.

Formatos de Salida de JPEG Relacionados

PJEG: Escribe una imagen JPEG de carga progresiva.
Esto no se usa mucho en estos días de descargas de red rápidas, pero era muy común cuando los módems de marcación eran la norma. Básicamente, escribe primero cada N líneas, luego una línea entre ellas, y así sucesivamente, de modo que puedas ver una imagen incluso después de descargar solo un pequeño porcentaje de la imagen completa.
JPEG2000: El último formato JPEG con nuevas adiciones.
Este formato requiere que la biblioteca 'JasPer jp2' esté instalada o recibirás un error…

"no encode delegate for this image format"

Este formato usa compresión wavelet para comprimir las imágenes en lugar del método DCT estándar de JPEG. Esto te da ratios de compresión mucho mejores para la misma calidad de imagen. Reduciendo así aún más el espacio en disco. Desafortunadamente, todavía no se ha adoptado ampliamente, así que no puedes usarlo para propósitos externos, al menos hasta que los navegadores web y otros visores y editores de imágenes también empiecen a usar el formato. Cualquier imagen guardada con este formato solo es legible por los usuarios que tengan esta biblioteca, y probablemente pasará mucho tiempo antes de que un buen porcentaje de usuarios use esta biblioteca. Particularmente los usuarios de windows, ya que Microsoft probablemente no la incluirá a menos que suficiente gente lo exija. Consejo de Quicktime: Quicktime usa el formato jp2 pero debe generarse a "[-depth](https://imagemagick.org/command-line-options/#depth) 8".

Procesamiento de JPEG sin ImageMagick (Un resumen rápido)

jpegtran Herramienta estándar que se instala con la biblioteca JPEG. Te permite aplicar varias transformaciones a las imágenes en formato JPEG sin decodificar ni volver a codificar los datos de la imagen, evitando así que los datos JPEG se degraden. (ver más abajo)
jpegtrans Una versión más nueva del programa "jpegtran" anterior, aunque muchas de las características añadidas (como el recorte sin pérdida) ahora se han integrado en la versión de biblioteca distribuida (arriba).
jhead Un manejador de JPEG sin pérdida más fácil de usar, especialmente en lo que respecta al perfil EXIF de cámaras digitales. Es decir, el manejo de comentarios, ajustes de fecha, extracción de miniaturas, eliminación o reemplazo, eliminación de perfiles, etc. También intenta asegurar que otros perfiles no se destruyan, algo que "jpegtran" tiende a hacer. También hay otros programas similares como "[ExifTool](http://www.sno.phy.queensu.ca/~phil/exiftool/)" y "[Exifer](http://www.exifer.friedemann.info/)". Muchos programas de JPEG a álbum de fotos web también hacen esto.
_La rotación sin pérdida de JPEG (que proporcionan todos los anteriores) solo funcionará correctamente para imágenes cuyo tamaño sea divisible por 8 o 16. Esto es cierto para la mayoría (pero no todas) de las fotos de cámaras digitales. Si lo intentas con una imagen de tamaño impar, los bloques del borde derecho o inferior (que contienen el tamaño parcial) no se posicionarán correctamente en la imagen final, ya que estos bloques solo pueden existir en el borde derecho o inferior.

Para un ejemplo de esto, consulta esta discusión específica_
---|---
Como puedes ver, la mayoría de estos programas están diseñados para procesar los metadatos de la imagen JPEG sin volver a procesar la imagen JPEG comprimida. (ver a continuación)

Procesamiento de JPEG sin Pérdida

Como decodificar y volver a codificar una imagen JPEG resulta en una degradación de la calidad de la imagen (a menos que se use compresión sin pérdida), la biblioteca de imágenes JPEG proporciona varios programas especiales que pueden manipular la imagen sin pérdida de calidad. Estos comandos también serán generalmente mucho más rápidos que los equivalentes de IM, ya que no tienen que hacer tanto procesamiento de la imagen. Al modificar comentarios en imágenes JPEG puedes usar los programas de bajo nivel de la biblioteca JPEG "rdjpgcom", "wrjpgcom" y "jpegtran". Sin embargo, te recomiendo que uses el programa "[jhead](http://www.sentex.net/~mwandel/jhead/)", ya que preserva cualquier perfil u otra información que también esté presente en la imagen. "jpegtran" te permite ir más allá y manipular los datos de la imagen sin pérdida de verdad, incluyendo la rotación de 90 grados, el recorte y la inserción. Incluso permite la creación de imágenes JPEG de calidad mixta. Para una demostración de esto, consulta la página JPEGhack de Nemo Thorx. (Consulta las notas más abajo) Sin embargo, estos comandos NO se recomiendan para uso general, ya que están limitados a los límites de bloque (8 o 16 bits) de la imagen JPEG. Es decir, solo puedes recortar, rotar o insertar a nivel de celda de compresión JPEG, no a nivel de píxel real. Comentarios... Si estás creando Páginas de Índice Web de Miniaturas con Montage de tus fotos JPEG, y te gusta usar los comentarios que añades a los archivos JPEG, usando los programas anteriores, usa un "-label '%c'" para decirle a montage que use el campo 'comment', antes de leer el nombre de archivo en la línea de comandos de "magick montage". También puedes usar ese comentario en una Transformación Polaroid Compleja, o en un Montaje Polaroid, o en algún tipo de Anotación de imagen. El programa "[jhead](http://www.sentex.net/~mwandel/jhead/)" se puede usar para añadir o modificar comentarios en archivos de imagen JPEG. Sin embargo, encontré que usar la opción "edit comments" ("-ce") no es una buena forma de hacerlo, ya que añade un salto de línea extra al final del comentario. Este salto de línea extra estropea el uso de comandos (formateo de escape de etiqueta '%c') en IM. La mejor forma es usar "comment input" ("-ci") para introducir un comentario (sin saltos de línea al final), o las opciones "comment literal" ("-cl") son una forma mucho mejor...

  jhead -cl 'Photo of some stuff, by Joe Citizen'  image_of_stuff.jpg

Miniaturas... Brian Jackson brian@brianjacksonphoto.com también informa de que la mayoría de las cámaras digitales (como la suya, una Cannon 1D) incrustan una miniatura de entre 12kb y 25kb de tamaño (160x120 píxeles) en la imagen JPEG que producen. IM puede extraer estas miniaturas usando...

   magick image.jpg   thumbnail:thumb.jpg

Sin embargo, el programa "[jhead](http://www.sentex.net/~mwandel/jhead/)" también puede extraer estas miniaturas...

  mkdir thumbs
  jhead -st "thumbs/&i" *jpg

Esto es súper rápido comparado con IM, ya que no edita la imagen, solo transfiere datos existentes. Sin embargo, la calidad de la miniatura no es ni de lejos tan buena como las miniaturas que IM puede generar a partir de la imagen real, y además puede que no estén rotadas correctamente, y definitivamente no tendrán el tamaño que quieres. Usando ExifTool... De parte de Rob: si quieres una edición más detallada de los perfiles almacenados en los archivos de imagen JPEG que la que proporciona "[jhead](http://www.sentex.net/~mwandel/jhead/)", echa un vistazo a aplicaciones más centradas en EXIF, como el "[ExifTool](http://www.sno.phy.queensu.ca/~phil/exiftool/)" basado en perl, una versión compilada alternativa "[ExifTool](http://www.dalibor.cz/minolta/exiftool.htm)", y una GUI de Windows "[Exifer](http://www.exifer.friedemann.info/)", por nombrar solo unas pocas. Con el módulo de Perl Image::ExifTool instalado, esto eliminará todos los metadatos JPEG sin pérdida. Encontré que lo siguiente es equivalente al método de línea de comandos para eliminar los datos EXIF. Por si alguien está interesado en el futuro:

  use Image::ExifTool;
  $exifTool = new  Image::ExifTool;
  $exifTool->SetNewValue('*');  # delete  all...
  $exifTool->WriteInfo('original_image.jpg','modified_image.jpg');
  $errorMessage = $exifTool->GetValue('Error');
  print  $errorMessage;  # (if has value an error occurred)

Costó algo de averiguar, porque resulta que primero necesitabas asignar el ajuste usando SetNewValue y luego cargar y guardar simultáneamente usando WriteInfo. Imágenes JPEG de Calidad Mixta, usando JpegTrans... Wolfgang Hugemann {Auto@Hugemann.de} quería que los bordes de una imagen JPEG no se comprimieran en absoluto, ya que estropea el manejo de fotos. Consulta este sitio. La solución proporcionada por Yuval Levy fue usar "jpegtran" para insertar un JPG de baja calidad dentro de un JPEG de alta calidad...

La solución: * produce dos versiones de la misma imagen con ImageMagick, una con la calidad alta 100 y la otra con calidad baja 60 (para reducir el tamaño). * usa jpegtran para recortar la q60, quitando 8 píxeles de cada lado * usa jpegtran para fusionar la q60 encima de la q100 * usa jpegtran para fusionar en una franja

Nemo Thorx jpeghack@nemo.house.cx leyó lo anterior e intentó implementar la calidad JPEG mixta. Lo consiguió y demuestra los resultados en sus páginas Wiki en JPEGhack. Básicamente, es muy posible hacer procesamiento JPEG sin pérdida, como 'recortar' e 'insertar' nuevas secciones de bloques JPEG en una imagen existente.


Formato de Archivo de Imagen PNG

Este es uno de los formatos de imagen más nuevos y modernos, soportando colores de 32 bits incluida la transparencia por canal alfa, pero también se puede optimizar a un esquema de color indexado de 8 bits tipo GIF (límite de 256 colores). Por ello, es un excelente formato intermedio para el procesamiento de imágenes sin pérdida de información de imagen.

Compresión PNG

Cuando se usa con salida PNG, la calidad se considera como dos cifras decimales. El primer dígito (decenas) es el nivel de compresión zlib, 1-9. Sin embargo, si se usa un ajuste de '0' obtendrás compresión Huffman en lugar de compresión 'zlib', ¡que a menudo es mejor! ¡Raro pero cierto! El segundo dígito es el tipo de filtrado de codificación de datos PNG (antes de comprimirse): 0 es ninguno, 1 es "sub", 2 es "up", 3 es "average", 4 es "Paeth" y 5 es "adaptive". Así que para imágenes con secuencias sólidas de color, un filtro "none" (-quality 00) suele ser mejor. Para imágenes de paisajes naturales, un filtrado "adaptive" (-quality 05) es generalmente mejor. | _El codificador PNG ha estado recibiendo mucho trabajo, y los mejores métodos para controlar los ajustes exactos de codificación y compresión normalmente se establecen usando el Operador Define.

Consulta Controles de Escritura de Imágenes PNG más abajo para más detalles sobre los defines, o mira los comentarios en el archivo del codificador PNG, el código fuente "coder/png.c.

_
---|---
Si tienes una imagen de ImageMagick con transparencia binaria (activada/desactivada), el codificador PNG la escribirá de manera eficiente, usando el chunk tRNS en lugar de un canal alfa completo. Pero si hay presente cualquier valor de opacidad distinto de 0 o MaxRGB, escribirá un PNG con un canal alfa. Puedes forzar este comportamiento usando el ajuste de lectura de imagen "-type TruecolorMatte", o puedes guardar la imagen usando el archivo de formato "PNG32:". Un programa externo "[pngcrush](http://pmt.sourceforge.net/pngcrush/)", o la versión más nueva "[OptiPNG](http://optipng.sourceforge.net/)", intentará recomprimir un PNG concreto para la mejor compresión posible disponible, y se recomienda para imágenes que planeas colocar en un sitio web. Otro programa "[pngnq](http://www.cybertherial.com/pngnq/pngnq.html)" lo cuantizará en color a un PNG de 256 colores y 8 bits, aunque no se sabe si esto soporta colores semitransparentes en ese formato.

Mejor Compresión PNG

Un detalle sobre las imágenes PNG es que la imagen PNG preservará el color de los píxeles completamente transparentes. Es decir, aunque no puedas verlo, la transparencia tiene color, y PNG preserva esos datos. Esto significa que en muchos casos se puede hacer que PNG comprima mejor reemplazando ese 'color invisible' por un color sólido estático, en lugar del color basura que pueda quedar de un procesamiento de imagen anterior. Hay dos métodos principales que puedes usar para esto: usar el Operador Alpha Background para tratar solo los píxeles completamente transparentes, o usar una operación del tipo Factor de Difuminado con Transparencia para mapear también los colores casi semitransparentes a negro completamente transparente. Por ejemplo, aquí tomo la imagen "a.png" con sombra difusa que generamos arriba y reemplazo todos los píxeles que están dentro del 20% de la transparencia total.

  magick a.png  -fuzz 10% -transparent none  a_compress.png

[IM Output]

[IM Output] [IM Output]

Como puedes ver, obtienes una mejora sustancial en el tamaño de la imagen (alrededor del 50%). Pero con un corte brusco para la sombra de la imagen. Otra alternativa es simplemente hacer el efecto de sombra más pequeño, ajustando los Niveles del canal de transparencia.

  magick a.png  -channel A -level 20,100%,0.85 +channel \
          -background black -alpha background a_compress2.png

[IM Output]

[IM Output] [IM Output]

También puedes mejorar los resultados del algoritmo de compresión, y por tanto el tamaño final de tu imagen PNG, usando un número menor de colores.

  magick image.jpg -thumbnail 200x90 -colors 256 \
          -quality 90 -depth 8  thumbnail.png

Esto, sin embargo, solo se recomienda para imágenes de miniatura pequeñas que no impliquen transparencia, y solo como paso final, ya que es una técnica muy 'con pérdida'.

PNG, Navegadores Web y Transparencia

Microsoft Internet Explorer (IE versión 6 y anteriores) no muestra correctamente PNG cuando hay implicada algún tipo de transparencia. Ahora bien, aunque este es el navegador más conocido que no soporta plenamente PNG, no es el único. Las páginas PNG transparency test y Another PNG test te dejarán probar tu navegador. También listan los navegadores y versiones que producen los resultados mostrados. Sin embargo, como IE (al menos en el momento de escribir esto) es probablemente el navegador más común, puedes añadir a tu página web una serie de soluciones alternativas al problema. Para información sobre esto, mira mi Página de Laboratorio WWW PNG with Transparency and IE, donde pruebo y demuestro la solución "PNG en IE" que estoy usando. Otras soluciones son convertir (magick) el PNG a formatos JPEG (con el fondo del color adecuado) o GIF. Estos métodos se discuten a fondo en Imágenes GIF sobre Fondos. Otra solución es establecer el color de todos los colores completamente transparentes de una imagen antes de guardarla a PNG. PNG guardará ese color completamente transparente, pero ten en cuenta que prácticamente cualquier otra operación de IM restablecerá el completamente transparente de nuevo a negro completamente transparente (ya que se supone que el color transparente no importa, pues así funcionan las matemáticas de imagen). Por ejemplo, la imagen de prueba estándar de los ejemplos de IM usa negro completamente transparente para cualquier píxel que sea completamente transparente. Podemos verificar esto ya sea desactivando el canal alfa, o guardándola como JPEG… |

  magick test.png test.jpg

[IM Text]
Ahora guardemos esto de modo que todos los colores completamente transparentes se reemplacen por el color 'silver' completamente transparente (consulta el operador Alpha Background)… |

  magick test.png   -background silver -alpha Background   test_silver.png

[IM Text]
Nota que la imagen debería seguir viéndose correcta si la transparencia (o el script JAVA especial de la página) está funcionando en tu navegador. Pero si desactivamos el canal alfa (guardando a JPEG, que no permite alfa), podemos ver que la imagen PNG realmente usa un color 'silver' para los píxeles completamente transparentes. |

  magick test_silver.png test_silver.jpg

[IM Text]
Nota, sin embargo, que esto NO modifica los píxeles semitransparentes, y estos seguirán teniendo sus colores normales (no transparentes) sin mezclar ese color ni con el fondo de la página ni con el color usado para la transparencia total. Como la semitransparencia ya no está implicada, los bordes pueden verse dentados (con aliasing), así como efectos de 'halo', a lo largo de los bordes de colores más claros. Por ejemplo, mira los bordes de los círculos blanco y negro, que muestran los efectos de aliasing de 'dientes de sierra'. Sin embargo, usar un color de reemplazo gris debería hacer esto no tan malo como el color 'negro' original usado para la transparencia total. La otra ventaja de establecer el color de los píxeles completamente transparentes es una mejora en la compresión de los datos. A veces, los colores subyacentes en las áreas transparentes usados durante el procesamiento se preservaron. Estos, a su vez, no se comprimen tan bien como un color sólido. Por ello, establecer el color completamente transparente como hicimos arriba puede producir un buen ahorro en el tamaño de archivo final. Sin embargo, esto debería hacerse como paso final, ya que muchas operaciones de procesamiento de imágenes de IM reemplazarán cualquier color completamente transparente presente en una imagen de nuevo por negro completamente transparente. Consulta el operador Alpha Background para una lista de operadores que se sabe que hacen esto. Mi preferencia, para los problemas de visualización de PNG, es que Microsoft arregle IE, y parece que IE versión 7 por fin tendrá un manejo de la transparencia PNG plenamente funcional, en todas las situaciones.

PNG y el Lienzo Virtual

Aunque normalmente PNG NO guardará la información del tamaño del lienzo virtual, sí guarda la información del desplazamiento del lienzo virtual y, si está presente, IM intentará generar un 'tamaño de lienzo' apropiado para ese desplazamiento y tamaño de imagen. Esto puede ser importante recordarlo para algunos operadores de imagen como "[-crop](https://imagemagick.org/command-line-options/#crop)", "[-trim](https://imagemagick.org/command-line-options/#trim)" y "[-flatten](https://imagemagick.org/command-line-options/#flatten)", etc., que usan el lienzo o el tamaño de página de las imágenes como parte de su operación o resultados. Por supuesto, puedes usar el ajuste "[-page](https://imagemagick.org/command-line-options/#page)" y el operador "[-repage](https://imagemagick.org/command-line-options/#repage)" para establecer o eliminar el tamaño y el desplazamiento del lienzo virtual. (Consulta Atributo de Página de Imagen). Por ejemplo, el segundo "magick" de IM ve el desplazamiento presente en esta imagen PNG, y define un lienzo lo bastante grande para asegurar que la imagen sea visible dentro de los límites del lienzo virtual (Añadido a IM v6.1.7)… |

  magick rose: -repage 0x0+40+30 png:- |\
      magick - -background LightBlue -flatten  png_offset_flattened.jpg

[IM Output]
Sin embargo, aunque el formato PNG normalmente no guarda la información del tamaño del lienzo, IM sí añade algunos metadatos de tamaño de lienzo virtual a las imágenes PNG. Estos datos, no obstante, solo serán utilizables por los comandos de IM, y generalmente los ignoran otros lectores del formato de imagen PNG. Por ejemplo, el segundo comando "magick" sí ve algo de información de tamaño de lienzo virtual… |

  magick rose: -repage 100x100+10+10 png:- |\
      magick - -background LightBlue -flatten  png_size_flattened.jpg

[IM Output]
Si el PNG lo procesa algún programa que no sea IM, estos metadatos de tamaño de lienzo probablemente se perderán. Recuerda que la información del tamaño del lienzo normalmente no forma parte del formato de archivo de imagen PNG. La otra cosa a tener en cuenta es que la información de 'desplazamiento' puede tener un desplazamiento negativo (a diferencia del formato GIF), e IM los manejará apropiadamente, haciendo el formato bueno para almacenar Imágenes de Capa intermedias. | Algunos navegadores web no manejan muy bien los desplazamientos negativos, produciendo resultados extraños (una versión de firefox tenía este problema). Lo mejor es evitar un desplazamiento negativo en imágenes que puedan ser usadas por otros programas como los navegadores web.
---|---

Resolución, Densidad y Unidades de PNG

Tras algunas pruebas, parece que el formato de archivo de imagen PNG no soporta un ajuste "[-units](https://imagemagick.org/command-line-options/#units)" de 'PixelsPerInch', solo 'undefined' y 'PixelsPerCentimeter'. Debido a esto, IM convierte un ajuste de densidad/unidad dado a los valores apropiados para 'PixelsPerCentimeter'. Más sobre este tema próximamente.

Subformatos de PNG

PNG: Por defecto. Guarda la imagen usando un formato económico.
PNG8: El equivalente PNG de GIF, incluyendo transparencia booleana y una tabla de 256 colores.
PNG24: Canales RGB de 8 bits sin canal alfa. Un caso especial puede incluir transparencia booleana (ver más abajo)
PNG32: Fuerza un formato de imagen RGBA completo con semitransparencia total.
PNG48: Canales RGB de 16 bits sin canal alfa
PNG64: Imagen RGBA de 16 bits (incluyendo semitransparencia)
PNG00: Hereda el color y la profundidad de bits del PNG de la imagen de entrada.
Para más información, consulta Ajuste de E/S de Tipo de Imagen. PNG8 fue definido por PhotoShop, no por el grupo PNG. Y aunque puede manejar múltiples colores semitransparentes, así como un color completamente transparente, IM asume que no. Esto proporciona una forma de forzar a que las imágenes funcionen correctamente por defecto y sean legibles por Internet Explorer v6. El programa "Photoshop CS" puede leerlo.
--- ---
Los estilos PNG48, PNG64 y PNG00 se añadieron a partir de IM v6.8.2-0
--- ---
Puedes forzar a IM a crear una tabla de índice de color de imagen (o paleta), entonces IM guardará esa imagen usando un formato "PNG8:"…
  magick {input_image}  -type Palette  indexed.png

Para forzar el uso de un único canal de escala de grises de 8 bits, pero no una imagen indexada con paleta, usa…

  magick {input_image}  -type GrayScale -depth 8  gray.png

También puedes (añadido en IM v6.3.5-9) generar escala de grises con un canal de transparencia.

  magick {input_image}  -type GrayscaleMatte  gray_with_transparency.png

Y para una imagen simple de dos colores…

  magick {input_image}  -type BiLevel  bitmap.png

Existe un caso especial para las imágenes PNG24. Si la imagen solo contiene transparencia booleana, y todos los colores transparentes son el mismo y ese color solo se usa para la transparencia, entonces el codificador PNG especificará ese color concreto como transparente. Por ejemplo… |

  magick a.png -channel A -threshold 75% +channel \
          -background hotpink  -alpha background png24:a_png24_alpha.png

[IM Output]
Esta imagen no tiene paleta, pero sí tiene algo de alfa activado/desactivado. El -threshold del canal alfa asegura que solo haya presente transparencia booleana (activada/desactivada), mientras que la opción Alpha Background asegura que todos los píxeles completamente transparentes sean de un color concreto. Lo anterior NO asegura que no haya ningún píxel opaco con ese color, así que lo anterior todavía puede fallar.

Controles de Escritura de Imágenes PNG

Para controlar mejor la escritura de imágenes PNG, Glenn Randers-Pehrson revisó varios controles de codificador "[Define Global Setting](basics.html#define)" para IM v6.5.2. Estos incluyen…

-quality '{level}{filter}'
El nivel de compresión básico y el filtro al guardar una imagen PNG.

-define png:compression-strategy=zs
-define png:compression-level=zl
-define png:compression-filter=fm

 Define por completo el sistema de compresión que se usará para la imagen PNG que se escribe. El ajuste [-quality](https://imagemagick.org/command-line-options/#quality) normalmente establecerá los valores _zl_ y _fm_, pero no el ajuste _zs_.
-depth
La profundidad general de la imagen a generar, normalmente establecida en 8 o 16 bits.
-define png:bit-depth={depth}
Especifica con precisión la profundidad del formato de archivo de imagen PNG resultante. Esto anula el control "[-depth](https://imagemagick.org/command-line-options/#depth)" normal de IM, pero solo para escribir imágenes PNG, y solo cuando el cambio se puede hacer sin pérdida. En el caso de las imágenes con mapa de colores, esta es la profundidad de los índices del mapa de colores, no de las muestras de color.
-define png:color-type={type}
Especifica con precisión el tipo del archivo PNG que se escribe. Los valores pueden ser '0' | para escala de grises, que permite 'bit-depths' de 2, 3, 4, 8 o 16.

---|---
'2' | para RGB, que permite 'bit-depths' de 8 o 16.
'3' | para indexado, que permite 'bit-depths' de 1, 2, 4 u 8.
'4' | para Gray-Matte
'6' | para RGB-Matte
Nota que "-define png:color-type='2'" es específicamente útil para forzar a que los datos de la imagen se almacenen como valores RGB en lugar de valores sRGB. Sin embargo, se puede lograr un efecto similar usando "-set colorspace sRGB" sobre una imagen RGB lineal. No obstante, no esperes que los programas respeten este espacio de color lineal al leer. Esto incluye a ImageMagick.

-profile PNG-chunk-{x}:{file}

Añade un perfil PNG en bruto en la ubicación {x} desde {file}. Los primeros 4 bytes de {file} contienen el nombre del chunk, seguido de un carácter de dos puntos ':', y luego los datos del chunk. La {x} puede ser 'b' para colocar el perfil antes del PLTE, 'm' entre el PLTE y el IDAT, o una 'e' para después del IDAT. Si quieres escribir múltiples chunks del mismo tipo, añade una cadena corta única tras la {x} para evitar que los perfiles posteriores sobrescriban a los anteriores. Por ejemplo..

-profile PNG-chunk-b01:file01 -profile PNG-chunk-b02:file02


+set date:create
+set date:modify

 Estas son 'propiedades' de imagen que crea ImageMagick siempre que lee un archivo. Contienen (respectivamente) la hora de creación del archivo de imagen (en realidad la hora de cambio de permisos/propietario/movimiento) y la hora de la última modificación del archivo. Desafortunadamente, a los formatos de archivo de imagen PNG les gusta escribir esos datos de imagen con el formato de archivo de imagen PNG, y si estos datos son diferentes, entonces el archivo generado también será diferente, aunque no haya cambiado nada más.


 magick logo: logo.jpg magick logo.jpg
    logo1.png

  sleep 2; touch logo.jpg      # change the JPG file timestamp
  magick logo.jpg logo2.png

  diff -s logo1.png logo2.png
  magick compare -metric RMSE logo1.png logo2.png null:

El "diff' anterior devolverá el mensaje

"Binary files logo1.png and logo2.png differ"

Aunque el "magick compare" devolvió "0 (0)", lo que dice que las imágenes tienen exactamente los mismos datos de imagen. Nota que, como IM sobrescribe estas propiedades con las horas del archivo PNG que acaba de leer, no puedes ver los valores reales de estas propiedades registrados en el PNG usando "magick identify". La solución es guardar las imágenes PNG sin ninguna 'marca de tiempo'.

  magick logo: logo.jpg
  magick logo.jpg +set date:create +set date:modify logo1.png

  sleep 2; touch logo.jpg
  magick logo.jpg +set date:create +set date:modify logo2.png

  diff -s logo1.png logo2.png

Esta vez "diff" informó…

"Files logo1.png and logo2.png are identical"

NOTA APARTE: también puedes usar otros programas de UNIX como "cmp", "md5sum" o "sha1sum" para comparar archivos de imagen binarios. Los dos últimos programas no están garantizados, pero son prácticamente imposibles de engañar, y son más rápidos para comparar más de dos archivos (usando la suma de comprobación). Gracias a algunas adiciones de GlennRP, el desarrollador de PNG, ahora también puedes usar "-define png:exclude-chunk=date" para decirle al codificador PNG que no escriba chunks de texto relacionados con la fecha.

Procesamiento de PNG sin ImageMagick

Hay bastantes aplicaciones auxiliares para PNG que podrían ser complementos útiles para generar un archivo de imagen PNG final. pngtrans Información PNG almacenada con una imagen
pngcrush Intenta encontrar la mejor compresión de un PNG probando a comprimir la imagen usando toda la compresión PNG lógica disponible, antes de hacer una elección final, para cada imagen individual. Esto, por supuesto, puede llevar algo de tiempo en cada imagen.
OptiPNG Un optimizador de compresión PNG más nuevo.
pngquant Optimizador PNG con pérdida, que reduce una imagen PNG a una paleta de color de 8 bits con tramado. Construirá PNG de color indexado con los colores de transparencia alfa transmitidos en el chunk tRNS.
pngnq Un cuantizador PNG con pérdida más nuevo, para generar imágenes PNG con tabla de color de 8 bits. También fuerza el uso de una paleta de color.
pngout Un optimizador PNG para plataforma Windows (con GUI opcional) que usa un compresor ZIP optimizado para el espacio en lugar de la velocidad (también en la página enlazada arriba).
La mayoría de estos sirven para mejorar el tamaño final del archivo de imagen, usando técnicas con pérdida O sin pérdida.

Perfiles de Imagen

Manejar perfiles en imágenes de calidad fotográfica es importante. Sin embargo, por lo que puedo decir, este es un arte muy mágico, y no es un asunto sencillo. No todos los formatos usan perfiles, pero la mayoría de los formatos modernos sí. Esto incluye JPEG, PNG, TIFF y (a partir de IM v6.3.4-1) GIF. De hecho, el problema se agrava por el hecho de que muchos programas ni siquiera entienden ni buscan perfiles de color en las imágenes. Alan Gibson, alias Snibgo elaboró un resumen de cómo varios navegadores web manejan varios perfiles de color, en su propia página Snibgo, ImageMagick Profiles. Vale la pena echarle un vistazo. Para listar qué perfiles están presentes en una imagen, usa…

  magick identify -verbose image.tif | grep 'Profile-.*bytes'

Los perfiles comunes (y un puntero a la información que tengo sobre ellos) incluyen…

 EXIF |  [Metadatos de Cámara Digital](photos.html#exif)

---|---
ICC | Perfil de Espacio de Color de Imagen
ICM | Gestión de Color de Microsoft (como ICC)
IPTC | Información de Imagen y Autor
8BIM | Perfil de metadatos de Photoshop. Incluyendo datos sobre: trazados de recorte (Clip Paths)… ¿Qué más?
XMP | Plataforma de Metadatos Extensible de Adobe (XMP) (Consulta la página de adobe)
Puedes extraer estos perfiles comunes usando algunos formatos de salida especiales que IM proporciona para este propósito. Por ejemplo…

  magick -define jpeg:size=64x64  image.jpg  iptc:profile.iptc
  magick -define jpeg:size=64x64  image.jpg  xmp:profile.xmp

La opción "[-define](https://imagemagick.org/command-line-options/#define)" anterior se usa como 'pista' para la biblioteca JPEG para reducir la cantidad de datos de imagen reales que lee en memoria y ahorrar así mucho procesamiento de los datos que en realidad no pretendes usar. También puedes insertar o reinsertar un perfil arbitrario como un 'blob' o cadena binaria que contenga la información que quieras.

  -profile '_profile_name_ :_data_file_ '

Es decir, el archivo "data_file" se añade 'tal cual' a la imagen como el perfil profile_name. IM o cualquier otra aplicación ignorará tales perfiles, a menos que sepa específicamente de él.

Conceptos Básicos de Perfiles de Color

Primero unas palabras rápidas…

La Gestión de Color es para Cobardes -- No juegues con ellos
Enredar con los perfiles generalmente empeora las cosas

Así que si los colores se ven bien… Déjalos en paz. Un usuario, fhoech, en los Foros de IM (que desde entonces ha desaparecido) publicó bastantes veces la siguiente introducción básica al uso de perfiles de color para cambiar el espacio de color usado por las imágenes… RGB, sRGB y CMYK no son espacios de color, son sistemas de color (que IM controla usando el operador "[-colorspace](https://imagemagick.org/command-line-options/#colorspace)"). No existe un único espacio de color RGB o CMYK, sino que una cantidad literalmente infinita de espacios de color diferentes es posible en cada sistema de color. Necesitas perfiles ICC (o ICM) que caractericen con precisión los colores de tus imágenes. Normalmente, el perfil ICC que describe una imagen debería estar incrustado en la propia imagen; de lo contrario, tienes que usar un intento de 'mejor conjetura', que es solo un apaño: abre la imagen en un editor de imágenes con capacidad ICC y asigna diferentes perfiles ICC (¡no conviertas!) hasta que encuentres uno que se vea bien con tu imagen (tu monitor debe estar calibrado para que realmente obtengas una buena vista previa de los colores). Luego, guarda la imagen con el perfil incrustado. En cuanto a por qué necesitas dos perfiles: el perfil de origen describe los colores de tu imagen tal como están ahora. El perfil de destino describe los colores de la imagen de salida tras la conversión. Además, debes tener mucho cuidado al convertir a un perfil de destino dado: si, por ejemplo, usas un perfil que describe la impresión offset sobre papel no estucado pero pretendes usar las imágenes para imprimir en papel estucado, por supuesto no obtendrás buenos resultados. El perfil de salida debe ser una representación precisa de la condición de salida que pretendes. Al convertir de un espacio de color sustractivo a uno aditivo (o viceversa) sin usar el perfil correcto (para ambos pasos de la conversión), no obtendrás colores ni brillo 'correctos' en la mayoría de los casos, aunque puedes tener suerte y dar en el clavo 'por accidente'. Puedes descargar perfiles de color desde el International Color Consortium.

Cambiar el Espacio de Color mediante Perfiles

Aunque puedes simplemente convertir (magick) espacios de color directamente así…

  magick _cmyk_image.jpg_ -colorspace rgb _rgb_image.jpg_

La mejor solución para convertir CMYK a RGB JPEG es usar perfiles de color con el operador "[-profile](https://imagemagick.org/command-line-options/#profile)". Raf Lenaerts señaló las siguientes reglas para usar el operador "[-profile](https://imagemagick.org/command-line-options/#profile)" dentro de ImageMagick…

Si no hay un perfil incrustado, entonces el primer "`[-profile](https://imagemagick.org/command-line-options/#profile)`" es el perfil de entrada. Un segundo "`[-profile](https://imagemagick.org/command-line-options/#profile)`" define entonces el perfil de salida.
Si hay un perfil incrustado, entonces un único operador "`[-profile](https://imagemagick.org/command-line-options/#profile)`" definirá inmediatamente el perfil de salida.

En resumen…

  • El "[-profile](https://imagemagick.org/command-line-options/#profile)" debe colocarse entre el archivo de entrada y el de salida.
    Esto es en realidad una Práctica estándar de Procesamiento de la Línea de Comandos de IM.
  • Usa "[+profile](https://imagemagick.org/command-line-options/#profile)" con 'icm' para eliminar cualquier perfil icc presente.
  • El primer "[-profile](https://imagemagick.org/command-line-options/#profile)" dado es entonces el perfil de entrada.
  • El segundo "[-profile](https://imagemagick.org/command-line-options/#profile)" dado es el perfil de salida.

Por ello, para usar perfiles para TODAS las imágenes, necesitarás tres operaciones "[-profile](https://imagemagick.org/command-line-options/#profile)": opciones de perfil de eliminación, entrada y salida. Por ejemplo, si la imagen de entrada ya tiene un perfil de color, entonces solo se necesita uno.

  magick _rgb_image.jpg_ -profile USCoat.icm _cmyk_image.jpg_

Pero si la imagen no lo tiene (o sabes que es una imagen RGB, sin un perfil existente), puedes usar…

    magick _rgb_image.jpg_ +profile icm \
            -profile sRGB.icc  -profile USCoat.icm _cmyk_image.jpg_

Esto establece la imagen resultante con un perfil CMYK USCoat.icm. Otro perfil CMYK es el perfil SWOP.icm. Para lo inverso (la imagen ya tiene un perfil), usa…

    magick _cmyk_image.jpg_ -profile sRGB.icc _rgb_image.jpg_

ADVERTENCIA: Si la imagen original ya contiene un perfil, por ejemplo un perfil CMYK, entonces dar dos conversiones de perfil es una mala idea. Por ejemplo

    magick _cmyk_image.jpg_ -profile "CMYK.icc" -profile "RGB.icc" \
                  _output_image.jpg_

Dará como resultado una conversión CMYK -> CMYK -> RGB. Pero como CMYK no es simétrico, el paso de conversión extra puede resultar en una conversión de color desastrosa. (Consulta la discusión del Foro de IM Question on ICC profile conversion behaviour)

Modificación de Perfiles de Color

Las imágenes que quieras convertir (magick) deberían tener todas perfiles ICC incrustados. Por ello, para convertir (magick) tus imágenes con el mismo perfil ICC CMYK…

  magick _rgb_image.jpg_ -profile CMYK_PROFILE _cmyk_image.jpg_

Esto convertirá (magick) usando el propósito perceptivo, el predeterminado (consulta Conversión de Espacio de Color para una explicación detallada sobre los propósitos de renderizado). Como los resultados con el propósito perceptivo pueden diferir mucho según el software que se usó para crear los perfiles ICC, puedes usar "[-black-point-compensation](https://imagemagick.org/command-line-options/#black-point-compensation)" junto con "[-intent](https://imagemagick.org/command-line-options/#intent) relative" para obtener un resultado algo más cercano a lo que uno podría esperar.

  magick _rgb_image.jpg_  -intent relative -black-point-compensation \
          -profile CMYK_PROFILE     _cmyk_image.jpg_

| Tanto el ajuste "[-black-point-compensation](https://imagemagick.org/command-line-options/#black-point-compensation)" como "[-intent](https://imagemagick.org/command-line-options/#intent)" deben especificarse antes de la operación "[-profile](https://imagemagick.org/command-line-options/#profile)" para que sea efectivo.
---|---
| La opción "[-black-point-compensation](https://imagemagick.org/command-line-options/#black-point-compensation)" se añadió a IM v6.2.7-0.
---|---
Puedes descargar perfiles de color desde el International Color Consortium.

EXIF InterColorProfile

Además del manejo de perfiles de color anterior, muchas cámaras digitales guardan información de perfil de color en el atributo de perfil EXIF 'InterColorProfile'. Este atributo está pensado para "asumirse en caso de que no haya ningún perfil de color incrustado ", según el documento "Colour Management and Adobe PhotoShop 7".

Perfiles IPTC

El perfil IPTC se usa en las imágenes para almacenar atributos de identificación de la imagen, como leyenda, crédito, autor, palabras clave, etc. Si quieres añadir un perfil IPTC a una imagen, necesitas un único -profile:

  magick _image.jpg_ -profile iptc _iptc_image.jpg_

Si una imagen contiene un perfil, puedes guardarlo con esto, de modo que puedas añadir ese perfil a otras imágenes similares:

  magick _iptc_image.jpg_ iptcData.iptc

O puedes extraer una versión de texto del perfil que puedes editar

    magick _iptc_image.jpg_ IPTCTEXT:iptcData.pro

Aquí, por ejemplo, hay un perfil aportado por fcaserio en los Foros de IM.

[IM Text]

Puedes añadir este perfil a una imagen usando

  magick _image.jpg_ +profile 8BIM -profile 8BIMTEXT:iptcData.pro \
          iptc_image.jpg

Esa imagen se puede convertir en un EPS (Postscript Encapsulado) con una vista previa TIFF (EPT), que también contiene el perfil IPTC. (Gracias, Tee Tanne).

  magick _itpc_image.jpg_  EPT:image.eps

Perfiles XMP

Extrae un perfil XMP de una imagen TIF…

  magick picture.tif metadata.xmp


Unas palabras sobre los formatos de Imagen Vectorial

Hay más de un estilo de almacenamiento de imágenes en el mundo… Ráster Imágenes que se almacenan y procesan usando matrices de píxeles de color. Los formatos de imagen ráster incluyen GIF, PNG, JPEG, TIFF, etc. Las imágenes pueden constar de múltiples matrices (canales) que representan diferentes colores, y pueden tener múltiples imágenes, capas o fotogramas (según el uso) en un mismo archivo de formato de imagen.
Vector Las imágenes se definen en términos de líneas, grosores, mosaicos, degradados y objetos compuestos más grandes. Los formatos incluyen SVG, Postscript, PDF, FIG, DXF, WMF e incluso fuentes TTF. Permite redimensionar imágenes, e incluso ampliarlas mucho sin pérdida de calidad. Además, al editar tales formatos, generalmente puedes mover objetos enteros sin destruir lo que hay debajo (superposición de objetos).
Fractal Las imágenes son un caso especial y raro, usado para lograr una compresión extrema de imágenes complejas, como pinturas antiguas. Sin embargo, el único uso que conozco es en un producto comercial muy caro. Fuera de ese uso, también se utiliza para objetos matemáticos complejos como los conjuntos de Mandelbrot y Julia, y para generar salpicaduras aleatorias de color en los salvapantallas (IFS). Se ve muy rara vez.
¿Por qué es esto importante? Porque IM es un 'procesador de imágenes ráster' y, aunque puede leer o escribir imágenes almacenadas en uno de los formatos vectoriales, lo hace convirtiendo la imagen hacia y desde una imagen ráster interna. En consecuencia, si intentas convertir (magick) una imagen de un formato vectorial a otro formato vectorial, IM esencialmente rasterizará esta imagen a la resolución o densidad definida en ese momento, que con suerte (pero es improbable) será adecuada para el dispositivo de salida en el que pretendes usarla. En otras palabras, ninguna salida de IM será jamás un verdadero formato vectorial. Aunque puede convertir (magick) su formato ráster interno en un archivo de formato vectorial, el resultado es solo una envoltura de imagen vectorial superficial alrededor de una imagen en formato ráster. Y a menos que la imagen ráster esté definida correctamente (a la resolución adecuada) para el dispositivo de salida, el resultado no será particularmente bueno. Desafortunadamente, los nuevos usuarios de IM no saben nada de esto. Ven IM como un conversor que puede convertir (magick), por ejemplo, PDF a Postscript, produciendo imágenes con efectos de aliasing 'cuadriculados', colores 'desvaídos', o imágenes borrosas que simplemente no se ven nada bien en el dispositivo de salida previsto. Lo que nos lleva a lo que intento decir…

Evita usar ImageMagick para conversiones de 'Imagen Vectorial' a 'Imagen Vectorial'
Por ejemplo: convertir entre formatos como: PDF, PS, SVG

En otras palabras, usa la herramienta adecuada para el trabajo adecuado. Y para esta situación, ImageMagick no es la herramienta adecuada.

Es decir, no quiere decir que no se pueda usar IM para hacer tal conversión. Después de todo, la mayoría de las impresoras y monitores en realidad rasterizan la imagen ellos mismos para la impresión real sobre una hoja de papel. La diferencia es que la impresora sabe qué resolución necesita para el hardware que está usando. ImageMagick no lo sabe. Para ejemplos de conversión de imágenes vectoriales a ráster (y de cómo mejorar tales conversiones), consulta el ejemplo Entrada de Texto y Gráficos Preformateados de Postscript/PDF, y para SVG e imágenes vectoriales generadas por el usuario, consulta Manejo de Imágenes SVG. También puede que te resulte útil la información sobre Tamaño de Fuente, Resolución y Pointsize, particularmente en lo que respecta al efecto de "[-density](https://imagemagick.org/command-line-options/#density)" sobre las fuentes de texto dibujadas.

Alternativas sin IM

Si realmente necesitas hacer una conversión general entre formatos vectoriales, se pueden usar el programa UniConvertor, Sk1 Project (normalmente disponible como un paquete linux estándar) y VectorSection para convertir (magick) de vector a vector sin rasterizar realmente las imágenes. Para la conversión general de Postscript a otros formatos vectoriales, mira "[pstoedit](http://www.pstoedit.net/pstoedit)", que normalmente está disponible en los repositorios de paquetes extra de tu sistema. Mira también "[epstopdf](http://www.ctan.org/tex-archive/support/epstopdf/)", que forma parte de la Comprehensive TeX Network (CTAN). TeX y LaTeX son un sistema de procesamiento de texto de documentación de UNIX (libros y artículos científicos). Tiene montones de herramientas relacionadas con los formatos Postscript y PDF. Para la conversión de SVG a PDF, Wolfgang Hugemann Auto@hugemann.de sugiere que la conversión de vector a vector más fácil era mostrar el SVG en un navegador (Firefox) e imprimirlo usando un controlador de impresora PDF. Aunque también se podría usar el "Uniconvertor".


Otros Formatos de Archivo de Imagen

Por supuesto, hay un número enorme de otros formatos de archivo de imagen que IM puede usar y entender; sin embargo, usar muchos de estos formatos menos 'comunes' está especializado para algún propósito concreto, y a menudo requiere algún ajuste u otras opciones para conseguir que funcionen como quieres que funcionen. No recomiendo estos formatos de archivo, y generalmente yo mismo no los uso. No obstante, intento registrar varias notas, técnicas y opciones que se han reportado en la lista de correo de IM o en el foro de IM, para que otros también puedan usar la información recopilada. Muchas de las notas están en una forma cruda, sin procesar, y estoy dispuesto a aceptar más contribuciones, o reescrituras de las notas de abajo.


Postscript (PS, EPS) y Adobe PDF

Para el manejo básico, consulta Manejo de Texto en Postscript y la advertencia sobre los formatos de Imagen Vectorial. El mayor problema con Postscript y sus formatos relacionados (como PDF) es que es un lenguaje complejo de formateo de páginas. Es decir, ¡el formato es un programa y no realmente un formato de imagen! Eso significa que IM se ve obligado a depender de otro programa externo (o delegado) para 'ejecutar' el programa y devolver la imagen generada.

Postscript Encapsulado (EPS)

El Postscript Encapsulado es en realidad exactamente lo mismo que el postscript normal (un formato de imagen vectorial), salvo que es una imagen de una sola página, y hay presente una entrada 'Bounding Box' para definir el área exacta que cubre la imagen. El formato se diseñó para permitir que otros programas muevan y escalen la imagen al insertar el postscript que define dentro de otros documentos postscript. IM lo maneja básicamente de la misma forma que el postscript. (Ver arriba).

  magick image.jpg -compress none eps2:image.eps

Usa "EPS2:" o "EPS3:" para crear archivos EPS comprimidos con JPEG: Nota: Añadir perfiles a las imágenes EPS está en la lista de 'cosas por hacer', pero actualmente no está soportado.

Entrada de Postscript/PDF

Como este formato es un formato de imagen vectorial, le afectan ajustes como "[-page](https://imagemagick.org/command-line-options/#page)" y "[-density](https://imagemagick.org/command-line-options/#density)". En Texto Formateado en Postscript se ofrecen ejemplos de lectura de Postscript (que es igual para los formatos EPS y PDF), y deberías leerlo primero. Sin embargo, la lectura de estos formatos es muy complicada, ya que son lenguajes de computación completos diseñados específicamente para generar una página impresa en impresoras láser de alta calidad. Esto queda muy fuera del alcance de ImageMagick, así que depende de un programa delegado especializado conocido como "ghostscript" para leer y convertir las páginas Postscript y PDF a una imagen ráster. Un punto. Como IM usa Ghostscript para rasterizar un archivo postscript a una resolución específica, cualquier imagen ráster que haya en el archivo postscript a menudo se verá borrosa o distorsionada, a menos que se conozca la densidad exacta de esa imagen ráster. Esto también asume que el propio programa postscript no rota ni manipula de otro modo la imagen ráster. De hecho, hay presentes múltiples delegados que IM selecciona según la situación. Por ejemplo, el 'ps:color' (que usa el dispositivo ghostscript 'bmpsep8') frente al 'ps:alpha' (que usa 'pngalpha') se selecciona dependiendo de si se ha establecido "-channel RGBA" o no. El delegado 'ps:color' se usa en lugar de 'ps:alpha' por defecto porque el dispositivo ghostscript 'pngalpha' solo soporta una página/una imagen y los PDF generalmente tienen varias páginas. Usa "-channel RGBA" antes de leer la imagen para seleccionar el método de delegado 'pngalpha'. Si todo lo que quieres es el número de páginas, usar ghostscript puede ser mucho más rápido.

  gs -q -sPDFname=document.pdf   pdfpagecount.ps
  %%Pages: 96

Windows y Ghostscript es un poco más complejo, ya que requiere el uso del registro de windows.

Opciones Especiales de Lectura de PDF de ImageMagick

Opciones especiales para el manejo de PDF…

-units PixelsPerInch
Debería establecerse al manejar documentos PDF (lectura o creación). No estoy seguro de qué hace esto, pero los informes indican que debería establecerse para que funcione correctamente.
-define pdf:use-cropbox=true
Usa una 'cropbox' en lugar de la 'mediabox' predeterminada, como en los archivos PDF generados por Adobe. (Básicamente añade un "-dUseCropBox" a la conversión de ghostscript desde imágenes PDF). NOTA: Esto funciona si tu PDF solo tiene una página, pero si es un PDF de varias páginas, no recortará correctamente.
-define pdf:use-trimbox=true
Usa una 'trimbox' en lugar de la 'mediabox' predeterminada, como en los archivos PDF generados por Adobe.

Modificar el Delegado de Entrada

Modificar el delegado del sistema es peligroso y un error podría dejar a IM incapaz de leer archivos postscript/PDF. También puede que necesites privilegios de administración, ya que no puedes reemplazar un delegado definido por el sistema por un delegado personal, debido a medidas de seguridad (anti 'hackers'). Consulta Delegados y Codificadores para Formatos de Imagen para más información sobre la sintaxis y el significado del XML de delegados, y sobre cómo crear delegados personales de entrada/salida. En el tema del foro Convert EPS to JPG Unreliable se sugirió que edites tu "delegates.xml" del sistema y reemplaces "-sDEVICE=bmpsep8" por "-sDEVICE=bmp16". Otros usuarios han comprobado que cambiar esto a "-sDEVICE=pnmraw" también funciona mejor. No lo he probado yo mismo, así que no puedo ofrecer ninguna garantía al respecto, ni sobre a qué versiones de Ghostscript se aplica. Si tienes más información, por favor házmelo saber. Si tienes un archivo postscript o PDF CMYK, entonces la página Blog of John detalla cómo puedes modificar la entrada del delegado (añadir una opción de ghostscript "-dUseCIEColor") para que la conversión de ghostscript maneje este tipo de postscript. Otra posibilidad es crear un "Delegado personal que invocaría pdftoppm. Digamos que la etiqueta se llama "pdfalt", que invoca el programa "pdftoppm" o incluso "pdfimage" del paquete "xpdf". Entonces tu flujo se vería algo así:

  magick pdfalt:image.pdf image.png

¿Alguien quiere intentar crear el delegado? ¡Háznoslo saber! También podrías querer probar a usar "pstoedit", que puede convertir un archivo postscript a otros formatos vectoriales, o pasar el postscript a la API de ImageMagick para convertirlo (magick) a mapa de bits. No he experimentado ni probado esto, y me gustaría recibir comentarios.

Extracción de Imágenes Ráster de PDF

El renderizado de cualquier página PDF a un tamaño o 'densidad' específicos está en el corazón de los gráficos vectoriales que usa PDF. Funciona muy bien para texto o dibujos lineales. Pero esto también significa que cualquier imagen ráster (matriz de píxeles) dentro del PDF tiene que redimensionarse. Pero redimensionar es una operación 'con pérdida', que resulta en cierta degradación de la imagen, ¡a menos que uses la densidad original de esa imagen ráster, que puede variar de imagen a imagen dentro del PDF! Por ello, es ventajoso poder extraer las imágenes ráster de un PDF sin ninguna referencia de 'densidad'. Puedes extraer las imágenes ráster directamente usando el programa "pdfimages", que forma parte de los paquetes de software poppler-utils o "xpdf-utils. Estos paquetes de software también contienen muchas otras herramientas que te pueden resultar útiles para el procesamiento de PDF. Consulta Poppler for Windows y Xpdf Reader. También podrías querer mirar la "mutool" del paquete "MuPDF", de las mismas personas que se encargan de GhostScript. Una herramienta en línea para extraer texto e imágenes es Sumnotes (comercial con prueba gratuita limitada). A un nivel más bajo, Wolfgang Hugemann dice que puedes extraer cualquier imagen contenida en un PDF (especialmente de los PDF generados por escáneres). Básicamente, extrayendo cualquier secuencia de bytes entre "stream" y "endstream", y guardándola como un archivo separado.

Extracción de Texto de PDF

Puedes usar el programa de GhostScript "ps2ascii" o "pstotext". O, como alternativa que hace tanto texto como imágenes, echa un vistazo a "pdftohtml", que tiene una salida XML que Ross Presser informa que es "bastante buena reensamblando párrafos. ". Además, el programa "pdftk" puede 'descomprimir' un PDF para que se pueda editar directamente, y 'reparar' PDF corruptos.

Opciones de Salida de Postscript/PDF

Se sabe que los siguientes ajustes afectan a la salida de los formatos de imagen Postscript, Postscript Encapsulado y PDF: "[-page](https://imagemagick.org/command-line-options/#page)", "[-gravity](https://imagemagick.org/command-line-options/#gravity)", "[-compress](https://imagemagick.org/command-line-options/#compress)", "[-density](https://imagemagick.org/command-line-options/#density)". Por defecto no se usa compresión en la salida de imagen PDF, así que los archivos PDF a menudo pueden ser mucho más grandes de lo necesario. La siguiente tabla equipara los modos de compresión de IM con el modo de compresión Postscript resultante usado.

Significados de la Compresión PS/PDF Compresión ajuste '/Filter [ ... ]' de la imagen
"-compress none" '/ASCII85Decode'
"-compress zip" '/FlateDecode'
"-compress jpeg" '/DCTDecode'
"-compress lzw" '/LZWDecode'
"-alpha off -monochrome -compress fax" '/CCITTFaxDecode'
"+compress"
"-compress rle"
cualquier otra cosa '/RunLengthDecode'

Las compresiones recomendadas para PDF son Zip (compresión Deflate) o la compresión Group4 (Fax).

  magick image.gif -alpha off -monochrome -compress Zip -quality 100 \
          -units PixelsPerInch -density 600  image_deflate.pdf

  magick image.gif -alpha off -monochrome -compress Group4 -quality 100 \
          -units PixelsPerInch -density 600  image_group4.pdf

Estos dos comandos producen archivos PDF mucho más pequeños que una conversión directa de una página en blanco y negro. Sin embargo, cuál es más pequeño depende de la imagen y es imposible determinarlo sin probar y comprobar el tamaño resultante.

Alternativas de Salida de Postscript/PDF

Recuerda que PDF es un formato de imagen (documento) vectorial, e IM es un procesador de imágenes ráster. Esto significa que cualquier documento PDF que IM cree consistirá básicamente en una sola imagen ráster por página. Las imágenes generadas en el documento PDF estarán fijadas a una resolución específica (o densidad de píxeles), lo que puede causar problemas de distorsión de píxeles al visualizarse o imprimirse a alguna otra resolución. Además, para documentos de texto, usar una imagen ráster es un derroche, ya que el texto plano con fuentes y metadatos de formato siempre será mucho más pequeño y se renderizará mejor que una imagen ráster escaneada del texto. Por esto, otros programas de creación de PDF pueden adaptarse mejor a tus necesidades. Esto te permitirá mantener las imágenes como imágenes, y el texto como texto, permitiéndote posicionar el texto y las imágenes juntos de una forma más agradable y lógica, así como insertar texto y superponer flechas o líneas de conexión de una manera más lógica. Por ejemplo, te sugiero que mires los programas de apoyo que proporciona el sistema TeX y LaTeX. Consulta Comprehensive TeX Network (CTAN). Otro conjunto de herramientas es Multivalent Document Tools. Por supuesto, tales programas son más difíciles de automatizar; sin embargo, en el pasado he usado el sencillo formato de archivo gráfico vectorial FIG (consulta Xfig) para generar documentos Postscript y PDF con texto y gráficos colocados de forma automática. Conversores de Imagen a PDF... La herramienta sam2p, que está especializada en convertir imágenes a archivos PDF. Así, hace todo el preprocesamiento con ImageMagick y luego realiza la conversión final usando "sam2p". Incluso incluye un pequeño script para ajustar el resultado a un papel A4. Del sam2p README: Q58) ¿Puede sam2p generar un PDF que esté escalado proporcionalmente (es decir, manteniendo la relación de aspecto) a un tamaño de página especificado, y centrado en la página?
A58) No, pero el script de Perl sam2p_pdf_scale.pl incluido con sam2p puede posprocesar el archivo creado por sam2p. Por ejemplo, para escalar y centrar un PDF en un papel A4, haz:
sam2p input.img output.pdf
sam2p_pdf_scale.pl 595 842 output.pdf

Desafortunadamente, no funciona con los PDF predeterminados creados por IM. -- Sebastian Krause, de la Lista de Correo de Usuarios de IM Documentos PDF de Varias Páginas... Puedes usar perl para combinar múltiples archivos PDF, sin recurrir a IM y su problema de rasterización…

#!/usr/bin/perl
#  Script   pdf-combiner.pl
use strict;
use warnings;
use PDF::Reuse;

prFile('combo.pdf'); # Output.
for (qw/a b c d/) # Inputs.
{
  prImage("result_$_.pdf");
  prPage();
}
prEnd();

También puedes usar un conjunto de herramientas JAVA para fusionar imágenes generadas por IM en un PDF, produciendo un PDF mejor que uno más simple que IM generaría…

#!/bin/bash

for x in ./*.jpeg
do
    echo $x to ${x}.pdf
    magick $x -quality 75 ${x}.pdf
done

echo Merging...
java tool.pdf.Merge *.pdf

Otro usuario en los Foros de Discusión de IM también sugirió usar PDFjam para fusionar múltiples páginas PDF.


Formato de Archivo de Imagen PbmPlus / NetPBM: PBM PGM PPM PNM PAM

Los filtros de manipulación de imágenes PbmPlus o "NetPBM" (línea de comandos unix). Estos formatos de imagen vienen en una variedad de estilos: "PBM" (mapa de bits), "PGM" (escala de grises), "PPM" (color), "PFM" (punto flotante, para HDRI), "PAM" (formato arbitrario) y "PNM" (cualquier formato NetPBM). Cada uno de estos (salvo "PAM" y "PFM") también puede estar en una forma binaria 'raw' (lo predeterminado al escribir tanto por IM como por NetPBM), o como formato de texto ASCII plano (establecido usando "[-compress](https://imagemagick.org/command-line-options/#compress) None"). IM, por supuesto, puede leer cualquiera de ellos. El formato debe considerarse como que usa únicamente el espacio de color "linear-RGB", y NO "sRGB" como la mayoría de los demás formatos de archivo de imagen. Sin embargo, debe usarse una profundidad de 16 al usar "linear-RGB", así que se recomienda precaución para evitar fuertes errores de redondeo con imágenes de profundidad 8. Los formatos NetPBM normalmente guardan una imagen por archivo. Sin embargo, IM, y muchas otras utilidades NetPBM, leerán y escribirán archivos con múltiples imágenes simplemente concatenadas juntas. Por ello, al escribir imágenes puede ser buena idea establecer el ajuste "[-/+adjoin](https://imagemagick.org/command-line-options/#adjoin)" apropiado al escribir archivos. (Consulta Escritura de Múltiples Secuencias de Imágenes para más detalles). El formato de archivo PPM es en realidad especialmente importante para ImageMagick, ya que es el formato de comunicación usado durante la conversión de imágenes Postscript y PDF mediante el delegado "ghostscript". También es un formato importante para el procesamiento de imágenes de vídeo, como desde el comando "ffmpeg". Se puede usar cualquier rango de 'calidad' o de valores en la entrada (hasta 16 bits o 'profundidad' 65535). Por ejemplo, aquí hay un rango de valores muy inusual de 5, para generar un 'degradado en escalones'. No conozco ningún otro formato de imagen que te permita usar un rango de calidad tan peculiar. |

  echo "P2 6 1 5   0 1 2 3 4 5" | \
      magick - -scale 120x20  pgm_step_gradient.gif

[IM Output]
Mira también Degradados Redimensionados, donde se usan imágenes de texto NetPBM para crear imágenes muy pequeñas (de 2 a 4 píxeles). Lo anterior también demuestra lo útiles que pueden ser los subformatos 'ASCII'. Especialmente como forma de añadir imágenes a scripts de shell, o como medio para generar imágenes a partir de una matriz de números. Por ejemplo, consulta TXT: Formato de Píxeles Enumerados. Un ejemplo de este uso se muestra en los ejemplos de Metodología de Redistribución de Histograma.

PbmPlus/NetPBM frente al Formato de Datos ASCII

Su salida ASCII es probablemente el método más limpio para extraer los valores de color de una imagen concreta, lo que de nuevo lo hace idóneo para scripts y procesamiento de imágenes simple.

  magick -size 20x2 xc: +noise random -channel G -separate +channel \
          -depth 16  -compress none   pgm_random_values.pgm

[IM Text]

Nota que cuando la salida es texto plano, las líneas no se escriben de modo que se alineen con la longitud de las filas de las imágenes. Pero puedes reformatear la salida usando las diversas utilidades de texto de UNIX. Por ejemplo, puedes usar la utilidad de texto "tr" para reemplazar y comprimir múltiples comas y espacios en un solo salto de línea, lo que colocará todos los valores uno por línea, facilitando que un script lo procese. Además, con IM solo puedes especificar una 'profundidad' de 8 o 16 para la calidad de salida de PGM y PPM. Mientras que los formatos PbmPlus permiten el uso de cualquier 'maxval' para sus valores, ¡incluso uno que no sea potencia de dos! Sí tiene un límite estricto de 16 bits de profundidad (maxval 65535). Un control más fino del 'maxval' real de la imagen NetPBM no es posible actualmente, aunque podría añadirse mediante un ajuste especial del codificador en el futuro. (si se solicita). Aquí hay otro ejemplo que genera una matriz 9x9 de valores de escala de grises de 0 a 255, extraídos de la imagen integrada rose. Usé "pnmtopnm -plain" para obtener un salto de línea al final de cada fila de píxeles.

  magick rose:[9x9+0+0] -colorspace gray -transpose -depth 8 PGM:- |\
    pnmtopnm -plain

[IM Text]

Variantes más antiguas de este comando NetPBM incluyen "pnmnoraw" y "pnmtoplainpnm", para hacer lo mismo que "pnmtopnm -plain". Comprueba la página de manual de tus paquetes NetPBM, ya que los desarrolladores no parecen ponerse de acuerdo sobre cómo debería hacerse. Cualquiera de estos programas PbmPlus generará un salto de línea al final de la 'fila de imagen', cosa que el codificador de ImageMagick no hace. Esto puede facilitar mucho el procesamiento de imágenes en scripts. Aquí hay un ejemplo de generación de un mapa de bits PBM ASCII muy pequeño.

  magick label:O pbm: | pnmtopnm -plain

[IM Text]

Nota que los mapas de bits PBM ni siquiera necesitan generar espacios entre valores, aunque están permitidos (IM los genera, las utilidades PbmPlus no). Nota también que para los mapas de bits blanco='0' (fondo) y negro='1' (primer plano). Esto es un estándar para formatos de mapa de bits como XBM y PBM, e ImageMagick entiende esta convención. Si esto no es deseable, Negate la imagen, o usa Nivelar Imágenes por Color para establecer los colores deseados de la imagen de mapa de bits.

Control de Profundidad de PbmPlus/NetPBM

A veces quieres más control sobre la profundidad de las imágenes PGM y PPM, por ejemplo para usar un rango percentil de valores de 0 a 99. Un método es usar el programa NetPBM "pamdepth", que puede convertir (magick) imágenes a cualquier rango (hasta los límites internos de 65335). Aquí, por ejemplo, hay una matriz de imagen de valores, pero usando un rango de valores de salida de 0 a 99.

  magick -size 9x9 radial-gradient: -depth 16 PGM:- |\
    pamdepth 99 | pnmtopnm -plain

[IM Text]

Aquí hay otro ejemplo, pero esta vez usando el operador Nivel Invertido para establecer el rango de valores de salida. Esto te puede dar más control sobre la transformación de los valores, pero el 'maxval' de la imagen PGM no coincide con el valor máximo de la imagen.

  magick -size 9x9 radial-gradient: +depth +level 0,99 PGM:- |\
    pnmtopnm -plain

[IM Text]

El "[+depth](https://imagemagick.org/command-line-options/#depth)" del comando anterior es vital para establecer la profundidad del archivo de imagen igual al nivel de calidad de IM. Todo lo que se necesita es restablecer (o ignorar) la tercera línea a un valor de '99', y opcionalmente comprimir la imagen de nuevo a un formato de imagen NetPBM binario 'raw'. Sin embargo, como PbmPlus/NetPBM tiene una profundidad máxima de 65535 (16 bits), esto solo funcionaría para las versiones Q8 o Q16 de IM.

Comentarios de PbmPlus/NetPBM

IM leerá, escribirá y preservará las líneas de 'comentario' en la cabecera del formato de archivo PbmPlus/NetPBM. Por ejemplo…

  magick -size 2x2 xc:grey -set comment "by Anthony" -compress none PGM:-

[IM Text]

No obstante, dicho esto, la mayoría de las aplicaciones, incluido el propio PbmPlus, ignorarán tales comentarios, e incluso los perderán cuando procesen el archivo.

  magick -size 2x2 xc:grey -set comment "by Anthony" PGM:- | pnmtopnm -plain

[IM Text]

PbmPlus/NetPBM frente a ImageMagick

El conjunto de procesamiento de imágenes PbmPlus/NetPBM fue en su día un rival de ImageMagick para el procesamiento de imágenes por línea de comandos, pero usa una filosofía de filtrado en tubería completamente diferente (de más bajo nivel) para el manejo y procesamiento de imágenes. Esto lo hace fácil de usar en scripts de shell, pero más difícil de usar para el procesamiento de imágenes general o muy complejo. También significa que la imagen se convierte hacia y desde el formato de archivo de imagen mucho más a menudo, y generalmente requiere el uso de muchos archivos temporales. Las imágenes PbmPlus/NetPBM generalmente no manejan la transparencia (aunque el más nuevo formato PAM sí), y no proporcionan una forma general de pasar metadatos de imagen junto con los datos de la imagen. Todos los formatos PbmPlus/NetPBM (como el formato interno de ImageMagick, consulta Streaming de Imágenes MIFF) pueden manejar un flujo de múltiples imágenes, simplemente concatenando o anexando las imágenes juntas, una tras otra. Esto lo hace muy adecuado para métodos de procesamiento de imágenes en tubería y con streaming de múltiples imágenes, como para el procesamiento de vídeo. Sin embargo, ten en cuenta que algunos programas PbmPlus/NetPBM solo manejan imágenes individuales y no manejarán un flujo de múltiples imágenes. No obstante, como es de más bajo nivel y es anterior a ImageMagick, a menudo se elige para salidas de imagen en bruto, como la salida y el manejo de imágenes de vídeo. Las imágenes PbmPlus también se usan más a menudo para datos científicos y, como tal, las imágenes se almacenan normalmente en el espacio de color 'linear-RGB' en lugar del más común y no lineal 'sRGB'. Se aconseja precaución. Ambos paquetes pueden coexistir, y se sabe que he usado una implementación de PbmPlus/NetPBM para algunas cosas, en lugar de ImageMagick. Normalmente al usar un procesamiento de imágenes específico de bajo nivel, o al programar usando matrices de valores almacenadas en forma de imagen. Los dos paquetes funcionan bien juntos, y recomiendo que ambos se instalen y usen para trabajo serio con imágenes. | _En realidad, fui yo quien hizo la vital versión de parche de NetPBM de 1995, en una época en la que se trabajaba poco en ese software. Por esto, tengo un buen conocimiento del software PbmPlus y su sencillo formato de archivo de imagen.

Desde entonces, ha sido redesarrollado varias veces por diferentes personas, y por fin parece haberse convertido en un proyecto de código abierto en condiciones. Los diversos programas parecen estar madurando y empezando a funcionar mejor juntos.

Sin embargo, sus principales problemas (la falta de metadatos y la complejidad) permanecen. Pero su simplicidad como formato de archivo es su mayor ventaja, haciéndolo ideal para la manipulación de imágenes y datos a muy bajo nivel.

_
---|---


TIFF

  El formato TIFF es el formato propietario de PhotoShop. Sin embargo, está tan
  sobrecargado de características, y ha sido modificado por casi todas las
  aplicaciones que se han molestado en usarlo, que ningún programa, ni siquiera
  photoshop, puede manejar TODAS sus variantes. Aun así, Photoshop es el que más opciones tiene de leerlo.

  Yo me mantendría alejado del formato de archivo de imagen TIFF a menos que
  estés trabajando específicamente con photoshop, o que la aplicación no acepte
  ningún otro formato de archivo de imagen mejor definido.

  No uso el formato de archivo de imagen TIFF, ni Photoshop. Si usas este formato
  con IM de forma extensa, quizá quieras enviarme tus hallazgos, para incluirlos
  aquí. De ese modo puedes ayudar a tus compañeros usuarios de TIFF.

  Que un paquete de software concreto pueda leer un TIFF, todo lo que puedes
  hacer es probarlo y ver. Ese es, justamente, el problema de este formato.



  TIFF y Densidad (resolución) en photoshop...

  Consulta [Photoshop y Densidad](basics.html#density_photoshop)
  para los detalles y las soluciones a este problema



  Conversión de JPEG a TIFF...

    magick image.jpg image.tif

  Esto guardará la imagen dentro del archivo TIFF usando compresión JPEG
  (heredada de la entrada JPEG). O bien dará un error como...

      Error: "JPEG compression support not configured"

  Esto se debe a que la biblioteca TIFF no incluye soporte de compresión JPEG.

  En cualquier caso, ESTO ES MALO.

  Puedes sortear este problema cambiando el ajuste para usar un algoritmo de
  compresión diferente:

      magick image.jpg -compress zip  image.tif
      magick image.jpg -compress lzw  image.tif
      magick image.jpg +compress      image.tif

  ADVERTENCIA: -compress Group4 con un TIFF funciona, pero SOLO si eliminas todos
  los píxeles transparentes y semitransparentes de la imagen. Normalmente puedes
  asegurarte de que esto se hace igual que con las imágenes JPEG de arriba, usando
     -background {color} -alpha remove
  Consulta [Eliminar la Transparencia de las Imágenes](masking.html#remove)
  justo antes del guardado final (lo primero solo funciona para imágenes individuales).



  Archivos de precisión de punto flotante TIFF (y MIFF) (Añadido a IM v6.2.6-5)...

  Esto es especialmente bueno para el procesamiento de imágenes HDRI (que usa
  punto flotante dentro del propio IM)

  Para precisión simple (float), establece...
         -depth 32 -define quantum:format=floating-point
  Para precisión doble (doubles), establece...
         -depth 64 -define quantum:format=floating-point

  Imágenes TIFF de 14 bits...
       magick logo: -sharpen 0x1 -depth 14 logo.tif

       tiffinfo logo.tif

       Image Width: 640 Image Length: 480
       Resolution: 72, 72 (unitless)
       Bits/Sample: 14
       Compression Scheme: LZW
       Photometric Interpretation: RGB color
       FillOrder: msb-to-lsb
       Orientation: row 0 top, col 0 lhs
       Samples/Pixel: 3
       Rows/Strip: 2
       Planar Configuration: single image plane
       DocumentName: logo.tif
       Software: ImageMagick 6.2.8 07/27/06 Q16 https://imagemagick.org

  Imágenes TIFF de 12 bits...

  Para convertir (magick) imágenes TIFF de 16 bits a 12 bits:
        magick image.tif -depth 12 image-12.tif

  Imágenes en blanco y negro puros...

       magick image ...  -type truecolor -type bilevel   image.tiff

    Da como resultado imágenes normales y el menor tamaño de archivo, y un
    manejo correcto del blanco/negro en Photoshop y en el Visor de Imágenes y
    Fax de Microsoft Windows.
       [discusión sobre TIFF](https://magick.imagemagick.org/viewtopic.php?p=51723),
       _[RQuadling](https://magick.imagemagick.org/memberlist.php?mode=viewprofile&u=7913)_.


  Endianness y orden de bits (fill-order)
    El orden en que se almacenan los valores de datos TIFF se controla mediante
       -endien                   Orden global de los bytes
       -define tiff:endian       Endianness del contenedor del formato Tiff
       -define tiff:fill-order   Orden de bits dentro de un byte

    Cada uno toma un valor de MSB (predeterminado) o LSB; sin embargo, el
    "tiff:fill-order" se establecerá al valor de "tiff:endian" si este está
    definido, pero no a partir del valor global de endian.

    La propiedad "tiff:endian" es la endianness del contenedor de la imagen. La
    propiedad "-endian" es la endianness de los píxeles de la imagen. Pueden diferir.


  Guardar un formato de archivo TIFF con solo una fila por strip

          -define tiff:rows-per-strip=1.
    Para guardar más filas por strip, aumenta el número
          -define tiff:rows-per-strip=8
    También puedes especificar el orden 'endian' para los enteros binarios del formato
          -endian MSB          -endian LSB

    Para imágenes TIFF más pequeñas (aparte de por compresión), también puedes
    probar a usar opciones y ajustes como   -depth 8   para reducir la calidad de
    color o   -alpha off  para eliminar el canal alfa o de transparencia de la imagen.

    IM guardará una imagen en escala de grises como un TIFF en escala de grises, si no
    hay colores que no sean de escala de grises. Puedes forzarlo a guardar como no escala de grises con
          -depth 8  -type TrueColor


  Añadido en IM 6.6.4-3
    Te permite establecer los metadatos (propiedad) "Software Creation:"
    a algo distinto de "Image Magick 6.**"
        -set tiff:software "My Software"


  Visor de Imágenes y Fax de Windows, Explorador de Windows

    Estos solo pueden mostrar TIFF que tengan ciertos valores de Interpretación
    Fotométrica, como RGB.  Opciones de IM...
        -compress LZW -type TrueColor

    alternar la interpretación fotométrica  (Añadido en IM 6.3.2-10)
        -define quantum:polarity=min-is-black
        -define quantum:polarity=min-is-white


  TIFF de varias páginas
    Si quieres dividir un tiff de varias páginas en páginas separadas, IM puede
    tener problemas, ya que seguirá usando mucha memoria para mantener las páginas
    anteriores aunque uses un comando como...
        magick "a.tif[i]" b%03d.tif

    Esto podría considerarse un error, o quizá una mejora futura.

    La mejor solución puede ser el programa "tiffsplit", ajeno a IM.


  TIFF y perfiles EXIF

    Cristy informó: La biblioteca delegada libtiff soporta el perfil EXIF,
    pero era poco fiable y causaba fallos demasiado a menudo, así que comentamos
    la llamada.

    Para obtener los atributos EXIF, prueba esto.

      magick identify -verbose -define tiff:exif=true image.tif

El formato TIFF puede tener una máscara de mapa de bits en forma de trazado de recorte (clip path), que se puede habilitar usando el operador "[-clip](https://imagemagick.org/command-line-options/#clip)". Puedes usar esa máscara 'clip' para enmascarar tu imagen con ese trazado usando…

  magick image_clip.tif  -clip \
          ...do_various_operations... \
          +clip-mask  image_masked.png

Consulta Máscaras de Escritura o de Recorte para más detalles.


BMP, Mapa de Bits de Windows

  El formato de imagen de iconos de escritorio de Windows BMP (abreviatura de
  bit-mapped) es un formato de imagen muy poco amigable y probablemente debería evitarse si es posible.

  ImageMagick soporta imágenes BMP de 8, 24 y 32 bits.

  Añade -colors 256 al final de tu línea de comandos (antes del nombre del
  archivo de imagen de salida) para crear una imagen BMP con mapa de colores de 8
  bits en lugar de un formato BMP de 24 bits. Se pueden añadir colores extra a las
  imágenes tras realizar operaciones como rotaciones y redimensionado. Consulta Cuantización de Color para más información sobre -color.

  La presencia de cualquier transparencia controla si usa un formato de imagen
  BMP de 24 (RGB) o 32 bits (RGBA). Puedes usar "-alpha off" para desactivar la
  transparencia en una imagen.

  Si todos los colores son de escala de grises, se genera una imagen de escala de
  grises 'directcolor'. Creo que -type truecolor detendrá este comportamiento.


  Si tienes un programa antiguo que no puede leer las imágenes BMP4
  predeterminadas que escribe ImageMagick (por ejemplo, una Imagen de Fondo de
  Windows), puedes forzar la generación de una imagen en formato BMP3 usando...

       magick image BMP3:image.bmp

  Este formato no debería tener transparencia y debería ser una 'imagen
  imprimible', signifique eso lo que signifique. En otras palabras, compatible con 'Windows'.

  Sin embargo, si se usó un archivo PNG de entrada y contiene un chunk gAMA y
  cHRM (información de gamma y cromaticidad), cualquiera de los cuales fuerza a
  "magick" a escribir un BMP4. Para obtener un BMP3 necesitas deshacerte de esa
  información. Una forma puede ser canalizar la imagen a través de un formato de
  archivo de imagen mínimo de 'solo datos de imagen' como PPM y luego volver a guardarla como BMP3. Engorroso, pero debería funcionar.

      magick image.png  ppm:- | magick - BMP3:image.bpm

  IM no puede producir BMP a niveles de profundidad distintos de 8. Sin embargo,
  puedes usar el conjunto de procesamiento de imágenes NetPBM para hacer la
  conversión final a otros niveles de profundidad (esto necesita al menos una versión Q16 de IM)...

       magick image -alpha off -colors 16 ppm:- |\
         pnmdepth 4 | ppm2bmp > image.bmp


  Limitaciones del formato....

  La cabecera de un formato BMP2: solo permite la descripción del ancho, el alto
  y la profundidad de bits (bits por píxel) de una imagen. La profundidad de bits
  puede ser una de 1, 4, 8 o 24.

  A modo de comparación, el formato bmp3: permite profundidades de bits de 0, 1,
  4, 8, 16, 24 y 32 y tiene campos extra que especifican la resolución x e y (en
  píxeles por metro) y la compresión de los datos de la imagen.

ICO

  Para crear una imagen en formato ICO de múltiples resoluciones, simplemente crea
  todos los tamaños de imagen que necesites y escríbelos todos al mismo archivo ICO.

    magick icon-16.bmp icon-32.bmp icon-64.bmp \
            icon-128.bmp icon-256.bmp   myicon.ico

  Actualización

    magick icon-256.png  \
            -define icon:auto-resize="256,128,96,64,48,32,16" \
            myicon.ico

Ahora puedes añadir esto a tus páginas web usando
  <LINK REL="shortcut icon" HREF="myicon.ico">

Sin embargo, muchos navegadores web ahora aceptarán la mayoría de los formatos de
imagen, no solo el formato ICO.

Formatos de Imagen RAW de Cámara (CRW,CR2,NEF,X3F,etc.)

La mayoría de las cámaras digitales, con la excepción del sensor Sigma Foveon y algunas cámaras Sony, convierten (magick) la imagen producida por el objetivo en datos digitales usando millones de sensores que detectan el brillo de un color específico, rojo, verde o azul. Para que la cámara responda al color aproximadamente de la misma forma que lo hace el ojo humano, hay el doble de sensores verdes que de rojos o azules, porque nuestro ojo es mucho más sensible a la luz verde. Los sensores se disponen en lo que se llama una matriz de Bayer. Para una descripción y diagramas de esta disposición, consulta, por ejemplo, Understanding Digital Camera Sensors. La conversión de los datos de una matriz de Bayer en los más familiares píxeles RGB requiere un proceso llamado demosaicing (interpolación cromática). Una vez realizada esta operación, todavía no tenemos una imagen que merezca mostrarse. Incluso con los píxeles verdes extra, el sensor de la cámara todavía no percibe el color como lo hacemos nosotros. Si tomas un trozo de papel blanco y lo miras a plena luz del sol y luego entras en casa y lo miras bajo una luz fluorescente, se verá blanco en ambas condiciones. Pero si fotografías la hoja de papel bajo esas mismas condiciones usando los ajustes predeterminados de la cámara, el papel mostrará colores ligeramente diferentes al verse en una pantalla. La razón es que, aunque el fondo de nuestras retinas "verá" la misma luz reflejada por el papel que la cámara, nuestro cerebro interpretará esa luz por nosotros y percibiremos el papel como blanco. La cámara simplemente mide la cantidad de luz roja, verde y azul que se refleja en el papel, y bajo una luz fluorescente habrá más luz azul que bajo la luz del sol, así que el papel de esa imagen se verá más azulado que el tomado a la luz del sol. Para producir imágenes que muestren ambas un papel blanco, se requiere que tengan un "balance de blancos", también llamado balance de grises o balance de color. Para más sobre el balance de blancos, consulta Understanding White Balance. Todavía hay otros aspectos del archivo raw que deben hacerse, como establecer una gamma correcta, pero sin entrar en más detalle está claro que el archivo raw necesita mucho procesamiento antes de poder convertirse en una imagen que podamos ver en un monitor. Los archivos raw de cámara a menudo se denominan negativos digitales. Si tomas una foto y haces que la cámara genere una imagen JPG, habrá hecho el demosaicing y todos los demás ajustes. Pero si, por ejemplo, olvidaste establecer el balance de blancos correcto en la cámara antes de tomar la foto, no puedes hacer realmente mucho con el JPG para corregir la situación, porque se ha perdido mucha información sobre la imagen original. Si, por otro lado, hubieras producido un archivo raw desde la cámara en lugar de un JPG, durante la conversión desde raw puedes elegir un ajuste de balance de blancos concreto junto con otros parámetros y, si la imagen resultante no se ve bien, puedes volver atrás, cambiar los ajustes y convertirla (magick) de nuevo hasta que se vea bien. Esto es similar a la capacidad de producir más copias a partir de negativos de película. Sin el negativo de película no podrías obtener una ampliación de 8x10 de una de las instantáneas de 4x6 que obtienes cuando la película se revela por primera vez. Aunque ImageMagick puede manejar una gran variedad de formatos diferentes, no 'sabe' cómo convertir (magick) los archivos raw de cámara, así que IM usa el programa "[dcraw](http://www.cybercom.net/~dcoffin/dcraw/)" como programa delegado para convertir (magick) el archivo raw en un formato que sí entiende, ya sea un TIFF (con el indicador '-T') o PNM. Nota que está diseñado para imágenes raw de cámara, y no para las de, por ejemplo, un escáner. El programa "[dcraw](http://www.cybercom.net/~dcoffin/dcraw/)" puede manejar un gran número de formatos raw diferentes, incluidos los de cámaras fabricadas por Canon, Fuji, Kodak, Nikon y Sony. Puedes determinar si "dcraw" reconocerá tus archivos raw pidiéndole que identifique una muestra. Por ejemplo, el comando:

  dcraw -i CRW_9641.CRW

Lo que devuelve...

CRW_9641.CRW is a Canon EOS 10D image.

Cuando IM llama a dcraw para hacer una conversión, usando el delegado (lístalo usando "-list delegate"), especifica dos indicadores que afectan al procesamiento de la imagen:

 dcraw -w -4 -O output_file input_file

El indicador '-w' significa que dcraw usará la información de balance de blancos del archivo raw si puede encontrarla. Si no se encuentra la información, dcraw usará un promedio de toda la imagen como base para el balance de blancos. El indicador '-4' significa que dcraw solo hará el demosaicing y el balance de blancos de la foto raw y generará el resultado como una imagen lineal de 16 bits (48 bits por píxel), adecuada para la versión Q16 predeterminada de IM. Como '-w' y '-4' son los únicos dos indicadores de procesamiento de imagen especificados, hay algunos valores predeterminados que dcraw usará. El espacio de color de salida será sRGB y no se hace ningún perfilado ICC (en mi sistema, dcraw se compiló sin la biblioteca LCMS, así que no puede hacer perfilado). El hecho de que el indicador '-4' esté establecido significa que se han omitido muchos pasos de procesamiento, incluido el ajuste de niveles y la corrección de gamma, y por eso la imagen resultante se verá oscura. La intención es que el usuario vaya a procesar la imagen con un editor de imágenes como "Photoshop" o "Paint Shop Pro", o incluso "ImageMagick", y haga su propio ajuste de los niveles, la gamma, etc. En este caso, la imagen debería generarse en un formato que soporte 16 bits por color. (Por ejemplo, TIFF). Nota que solo porque dcraw produzca un archivo de 16 bits no significa que los 16 bits contengan datos útiles. Por ejemplo, una imagen raw de una réflex digital Canon 10D tiene 10 bits por color. Las cámaras más recientes de Canon y otros fabricantes tienen 14 bits por color. Si quieres que tus fotos raw se conviertan por completo, tendrás que eliminar el indicador '-4' para que dcraw haga el demosaicing, el balance de blancos, el brillo y la corrección de gamma, etc. En este caso, dcraw genera un archivo de 8 bits (24 bits por píxel). Si vas a seguir procesando esta imagen, lo mejor sería generarla como un PNG y evitar los artefactos de compresión JPEG. El formato JPEG solo debería usarse como paso final para el uso real. De hecho, siempre es buena idea usar un formato sin pérdida como PNG (o el formato interno de IM, MIFF) para los pasos intermedios del procesamiento de imágenes. Se puede añadir un Delegado DCRaw especial que te permitirá controlar cómo lees los formatos de imagen 'raw' de cámara. Para más información, mira el Sitio Web de DCRaw, y también el Sitio Web del Tutorial de DCRaw, que tiene información sobre muchos de los indicadores opcionales de dcraw, incluyendo histogramas de imágenes raw usando varios indicadores. Consulta también DCRaw by Example. Las notas anteriores se extrajeron primero de un Tema del Foro de IM Converting RAW images, por jhfry, con grandes reescrituras por el_supremo.


Películas MPEG, M2V y AVI

  IM no es muy eficiente creando películas. Hará el trabajo, aunque requiere el
  programa externo "mpeg2encode" para hacer gran parte del trabajo sucio.

  El problema es que IM no está diseñado para manejar vídeo, sino imágenes
  estáticas o pequeñas secuencias de imágenes. Es decir, no quiere decir que no
  pueda hacerlo, pero ese no es su objetivo. En particular, generalmente lee todas
  las imágenes en memoria y las procesa desde ahí. Para un vídeo grande o largo
  esto no es muy eficiente.

  Para procesar una pequeña secuencia de fotogramas, sin embargo, realmente no
  tiene rival. De hecho, casi todos los programas de manipulación de vídeo de
  Linux usan ImageMagick para generar títulos, vistosos cambios de escena y otros
  efectos para completar el desarrollo de posprocesamiento de un desarrollo de
  vídeo mayor. El proceso, no obstante, se mantiene en pequeñas secuencias de vídeo.

  No obstante, echemos un vistazo a lo que IM puede hacer.

  **De Fotogramas a Vídeo**

  Hay algunos informes de que, a menos que la relación de aspecto de las imágenes
  sea la correcta, esto fallará en reproductores mpeg antiguos; usa en su lugar la
  extensión MPEG II (m2v:).

  Usa también m2v para evitar la pixelación por compresión fuerte que puede
  ocurrir usando...

      magick *.jpg glacier.mpg

  Por ejemplo, usa en su lugar...

      magick *.jpg m2v:glacier.mpg

  Nota que puedes necesitar mucho espacio temporal para hacer animaciones grandes.
  Puedes especificar un directorio diferente del /tmp habitual usando...

      setenv MAGICK_TMPDIR /data
      magick -limit memory 0 -limit map 0 *.jpg image.m2v

Alternativas...

  Para convertir imágenes PNG a flujos de vídeo MPEG2, en lugar de archivos MNG
  multi-PNG, usa la siguiente delegación...

       png2yuv -j file%08d.png -I p -f 25 -b 1 | \
         mpeg2enc -f 3 -q 3 -b 5000 -o out.m2v

  Para más información, consulta [mjpeg.sf.net](http://mjpeg.sf.net/)


  Los foros de IM reportaron resultados decentes con un proyecto de código abierto llamado "[ffmpeg](http://ffmpeg.org/)", que parece ser una
  instalación de paquete linux bastante estándar.

     ffmpeg -f image2 -i %03d.jpg -vcodec mjpeg -y anim.mpg

  Extraer un MVG con un fondo transparente
      magick -background none -size 320x240 sample.mvg out.png


  Michael Lenh escribió...
  Por fin pude crear un vídeo muy atractivo usando mplayer

    mencoder "mf://data/p*.png" -mf fps=40 -o particle.avi -ovc lavc

  Puedes ver los resultados en...

    http://www.mathematik.uni-ulm.de/~lehn/particle.avi
    http://www.mathematik.uni-ulm.de/~lehn/temperature.avi


  [mabu](https://magick.imagemagick.org/memberlist.php?mode=viewprofile&u=19117) en una [Discusión del Foro de IM](https://magick.imagemagick.org/viewtopic.php?f=1&t=18724) dijo que
  "_USA MENCODER, vaya, es como 1000 veces más rápido y de verdad FUNCIONA_ "...

     mencoder -nosound mf://*.jpg -mf w=800:h=371:type=jpg:fps=15 -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=2160000:mbd=2:keyint=132:v4mv:vqmin=3:lumi_mask=0.07:dark_mask=0.2:mpeg_quant:scplx_mask=0.1:tcplx_mask=0.1:naq -o output.mpg

  Probablemente tiene opciones extra que no necesito, pero hace un bonito
  time-lapse a partir de archivos .jpg.


  Dean S. Messing usa transcode...

     find . -type f -name '*.png' | sort > filelist
     transcode -x imlist,null\
            --use_rgb\
            -y raw,null\
            -f 60\
            -i filelist\
            -g 4096x2160 \
            -j 540,1024,540,1024\
            -o video.avi\
            -H 0

   Puedes omitir -j  (ventana de recorte) si quieres. -g es el tamaño de salida.

   Wolfgang Hugemann sugiere una nueva alternativa conocida como 'VirtualDub' en
   Windows Vista, que te permitirá ejecutar un vídeo, o convertir (magick)
   directamente desde una carpeta de fotogramas de imagen.

   ADVERTENCIA: a "mplayer" aparentemente no le gustan los archivos mpeg con
   un solo fotograma. "ffplay", sin embargo, parece no tener problemas.


   **De Vídeo a Fotogramas**

   Tanto "[mplayer](http://www.mplayerhq.hu/)" como
   "mencode" son más eficientes convirtiendo vídeo en una serie de fotogramas que
   IM. Además de esto, puede manejar prácticamente cualquier códec de vídeo (y
   audio) disponible.

   Por ejemplo, para tomar 5 fotogramas a 1 minuto y medio de un vídeo, escalados
   a 320x240, puedes usar...

      mplayer file.mov -vf scale=320x240 -ss 01:30 -ao null \
              -vo png:z=3 -frames 5

   Otras alternativas incluyen la biblioteca de código abierto "[ffmpeg](http://ffmpeg.org/)", aunque esa también forma parte del
   manejo de "[mplayer](http://www.mplayerhq.hu/)".

MNG, Multiple-image Network Graphics

Aportado por Barry Loo de la discusión Example Ming Animation. MNG (se pronuncia ming) es un formato abierto basado en PNG, y proporciona una alternativa de mapa de bits animado a GIF y otros. Permite transparencia (tanto semi como total), compresión (tanto con pérdida como sin pérdida) y hasta 32 bits de profundidad de color. La mayor profundidad de color es lo que realmente distingue a este formato de los demás. GIF solo soporta hasta 256 colores en total, lo cual está bien para muchos gráficos; sin embargo, las fotografías y los degradados se resentirán. La mayoría de las opciones de animación que se pueden usar al crear animaciones GIF también se pueden usar para crear MNG. |

magick -size 101x101 radial-gradient: \
        \( -clone 0 -level 00,100% +level-colors ,#F00 \) \
        \( -clone 0 -level 10,100% +level-colors ,#F12 \) \
        \( -clone 0 -level 20,100% +level-colors ,#F24 \) \
        \( -clone 0 -level 30,100% +level-colors ,#F36 \) \
        \( -clone 0 -level 40,100% +level-colors ,#F46 \) \
        -delete 0  -duplicate 1,-2-1 -set delay 1x30 -loop 0 pulsing.mng


El comando anterior genera una imagen radial-gradient, que luego se clona y ajusta para crear un pulso de rojo a un rojo-naranja más brillante. Esto luego se duplica para crear un Ciclo de Patrulla invertido antes de crear una animación MNG en bucle de 30 segundos. Desafortunadamente, la mayoría de los navegadores web actualmente no soportan MNG, y muchos reproductores de vídeo solo muestran una pasada de la animación en bucle. Si haces clic en el fotograma de imagen ausente de arriba, puedes descargar la animación y verla usando el Comando Animate de IM. Para más información sobre el formato MNG, visita el Sitio Web de MNG.


DPX, Formato Digital Picture Exchange

Este formato se usa en la industria del Cine y los Efectos, que hace un uso particular de la extensa información de cabecera y de la flexibilidad del formato para poder manejar alto rango dinámico y valores de color logarítmicos a una variedad de profundidades de bits usando descripciones de píxeles RGB o YCbCr. Está basado en, pero en gran medida supera, el formato Cineon de Kodak, que tiene una cabecera más específica para película. Un ejemplo de su uso sería al escanear película para usarla en posproducción. Cada fotograma se almacenaría como un archivo .dpx individual que va desde 2k (2048 píxeles de ancho) hasta 8k (8192 píxeles de ancho, para fotogramas IMAX) a cualquier valor entre 8 y 64 bits por componente de color. Una secuencia de estos podría entonces procesarse usando software de composición, alterando el color o añadiendo efectos visuales. Una vez completados, podrían grabarse digitalmente en cinta o proyectarse de vuelta sobre película. Los valores de color de cada píxel a menudo se almacenan logarítmicamente (particularmente si la secuencia está destinada a transferirse de vuelta a película), lo que refleja de forma más natural la densidad con que la información de color se almacena en la emulsión de la película original. Cuando se ven sin alteración, los archivos logarítmicos parecen tener muy poco contraste, y por ello requieren una 'tabla de búsqueda' para traducir la imagen logarítmica a algo que se parezca a lo que verías si la imagen se transfiriera de vuelta a película y se proyectara en un cine. Además de hacer la imagen lineal (como la mayoría de las imágenes típicas de ordenador) y ajustar el nivel de gamma, esta tabla establece dónde se sitúan los puntos de blanco y negro. Para una imagen logarítmica de 10 bits, donde cada valor de componente de color va de 0 a 1023, los puntos de blanco y negro se establecen normalmente en 95 para el negro y 685 para el blanco. Lo que esto significa es que el archivo logarítmico almacena valores de color que son más claros que lo que la versión lineal mostrará como blanco puro y más oscuros que lo que mostrará como negro puro. Esta información extra, por tanto, permanece disponible para los artistas de efectos que puedan desear alterar el brillo de la imagen después de haberla almacenado como archivo dpx. Como ejemplo, si esta información se hubiera perdido, reducir el brillo de una imagen de forma uniforme haría que las luces se volvieran más oscuras, mientras que con esta información extra las luces, en cambio, reducen su tamaño y empiezan a mostrar detalles que antes eran demasiado brillantes para verse. Esto último está mucho más cerca de lo que ocurre en el mundo real. La cabecera puede contener datos específicos de Cine y/o Televisión relacionados con una producción. Por ejemplo, la cabecera de televisión puede contener un código de tiempo SMPTE para que las tomas exportadas como secuencia dpx desde el montaje de una producción se puedan reemplazar fácilmente una vez añadidos los efectos. La cabecera de cine guarda información sobre el rollo de película del que se originaron los fotogramas y varios ajustes de cámara que se usaron durante el rodaje. Todos estos detalles permanecerán entonces con las imágenes a medida que se pasan entre empresas de posproducción.

Añadir un código de tiempo a los archivos DPX

Puedes añadir un código de tiempo a cualquier archivo dpx usando lo siguiente:

  magick -define dpx:television.time.code=10000215 \
          originalFile.00001.dpx    alteredFile.00001.dpx

Ejecutar este comando para cada uno de los varios miles de archivos que forman una secuencia de una película o animación llevaría claramente mucho tiempo. Se puede usar un script sencillo con ImageMagick para incrementar automáticamente el código de tiempo de cada fotograma de una secuencia. Por ejemplo, consulta el Script de Perl dpx_timecode.pl.
Una copia de lo anterior se añadió a la documentación principal de IM en Introduction to Motion Picture Formats. Lo anterior es cortesía de Seth Dubieniec , de una larga Discusión del Foro de IM sobre el Formato DPX. Actualmente está desarrollando aplicaciones DPX, así que es probable que llegue más información sobre DPX.

**Notas Adicionales (sin formato)...**

Añadir  -depth 10  hace que IM genere un archivo DPX de 10 bits.
-- James Fancher


Si quieres establecer la gamma, por ejemplo, en la imagen DPX de salida...
     -define dpx:television.gamma=1.7

El espacio de color de la imagen DPX se define por el descriptor de elemento de
imagen y la transfer-characteristic. Si la característica de transferencia es
PrintingDensityColorimetric, establecemos el espacio de color a LogColorspace.
Solo si el espacio de color es Log aplicamos la gamma y los puntos de
blanco/negro para convertir al espacio de color RGB. Es posible que el programa
que estás usando no se ajuste al estándar SMPTE o que ImageMagick no esté
interpretando el estándar correctamente. Publica una URL a tus dos imágenes DPX y
las descargaremos e intentaremos determinar si ImageMagick tiene un error o si el
programa que estás usando tiene errores.

Lo siguiente funcionará con ImageMagick 6.3.8-3

  magick -colorspace log AfterEffectsFile.dpx -set gamma 0.5 \
          -set reference-black 95 -set reference-white 685 image.jpg

Como alternativa, echa un vistazo a la documentación de SMTPE
-- Cristy


Puedes añadir datos de usuario de texto al archivo dpx usando

  magick image.dpx   -set dpx:userdata "some text"    new.dpx

-- Cristy

PSD

Un archivo de imagen PSD es el formato de archivo de imagen de trabajo de Photoshop, igual que XCF es el formato de archivo de trabajo de GIMP, y MIFF es el propio formato de archivo de trabajo de ImageMagick. Normalmente contienen múltiples imágenes, siendo la primera imagen una fusión todo-en-uno de la imagen de trabajo actual. Eso lo hace útil para ver la imagen de trabajo tal como está en ese momento y normalmente se usa para 'generar miniaturas'. Todas las demás imágenes del formato de archivo multiimagen son las imágenes que se usan para generar esa primera imagen combinada. Es decir, las imágenes de capa de trabajo individuales en las que el usuario estaba trabajando en el momento en que se guardó. Así que si solo quieres la imagen 'final', te sugiero que añadas un " '[0]' " al nombre del archivo de entrada para descartar las imágenes de trabajo y usar solo la primera imagen todo-en-uno. Sin embargo, si planeas trabajar con las imágenes de capa individuales, usa " '[1--1]' " para saltarte la primera imagen. Si no se encuentran imágenes de capa extra, se devolverá en su lugar la primera imagen. NO recomiendo usar "-delete 0" ya que eso no devolverá ninguna imagen en absoluto si no hay imágenes de capa que sigan a esa primera imagen. Notas adicionales... Si puedes proporcionar más información o quieres enviar un resumen del uso de IM para este formato, por favor hazlo...

   Para un PSD con una imagen CMYK puede que necesites hacer que IM use el
   perfil correcto al convertir (asegúrate de que tu IM se instaló con la
   biblioteca delegada LCMS) ....

     magick Test_CMYK.psd -strip -profile USWebCoatedSWOP.icc \
             -profile sRGB.icc Test_RGB.png

   Consulta [Perfiles](#profiles) arriba para más información.


   Si una imagen PSD contiene una imagen de 'vista previa'. Esta imagen se
   devuelve como la última imagen de una lectura de dos imágenes.

   Para asegurar que IM nunca lea la última imagen, usa...
       magick test.psd[0--2] -flatten test.jpg
   Es decir, lee todas las imágenes, excepto la última. Pero lee siempre la
   primera. Esto no se puede hacer después de la lectura usando un "-delete".

WMF

Otro formato vectorial usado a menudo para clipart escalable, utilizado por el conjunto de programas de Microsoft Office. La entrada se puede escalar cambiando el "[-density](https://imagemagick.org/command-line-options/#density)" antes de leer la imagen. Consulta también Formatos de Imagen Vectorial.


Animaciones Flash (SWF)

Las animaciones Flash actualmente no están soportadas por IM. Pero, solo por completitud, Scott Bicknell informa de que la utilidad "swfextract" de SWF Tool puede extraer fotogramas jpeg o png de una animación flash. Wolfgang Hugemann también cree que la herramienta freeware de Windows "IrfanView" puede que sea capaz de hacer esto también. A mí me parece un buen candidato a delegado.


Conversión de Página Web a Imagen (HTML)

Si IM carga un HTML, buscará un html2ps para convertir (magick) el html a postscript, que luego puede renderizar como una imagen. Esto no funciona muy bien, pero funciona. Usar un navegador web completo es un método mucho mejor, ya que está diseñado para hacer la tarea de la mejor manera posible. El método más simple para usar un navegador es simplemente cargar la página en un navegador y luego hacer una captura de pantalla de ella. Esto obtiene una imagen perfecta de la página, pero limitada al tamaño de ventana del navegador. Otra variante es hacer que el navegador genere la página como postscript en lugar de que IM la convierta (magick). Esto debería paginar el sitio web en páginas más pequeñas bastante bien. En LINUX puedes iniciar un servidor de pantalla X windows virtual lo bastante grande para ejecutar un navegador que muestre todo el sitio web. Esta puede ser una pantalla MUY alta. El navegador se ejecuta entonces en ella y se configura para llenar toda la pantalla. Se carga el sitio web y de nuevo se hace una captura de pantalla. He visto un script que incluso puede automatizar todo ese complejo proceso. Sin embargo, puedes acabar con una imagen MUY larga. También es difícil saber cómo de grande hacer la pantalla. Básicamente, NO es fácil, y las mejores soluciones solo usan IM para el procesamiento final de la imagen, no para la generación de la imagen a partir del html.


Formato de Impresión PCL

El PCL de IM es PCL versión 6 por defecto. Para la versión 5, necesitas convertir (magick) tu imagen a blanco y negro. Por ejemplo...

  magick image.png -monochrome image.pcl


Kodak PhotoCD o ProPhotoCD (PCD)

El archivo Kodak PhotoCD es un formato de archivo de imagen multiresolución. Es decir, cada archivo contiene la misma imagen en 6 tamaños diferentes formando algo conocido como una 'imagen piramidal'. La primera imagen del archivo es la de menor resolución (menor tamaño) y la última la de mayor resolución (mayor tamaño, a 3072×2048 píxeles). Como los usuarios normalmente quieren la imagen de mayor resolución para procesarla, la forma de convertir (magick) una imagen PCD a algún otro formato como JPG es tomar la sexta (índice 5) del archivo de imagen. Por ejemplo...

  magick -colorspace RGB image.pcd[5] image.jpg

La opción "-colorspace RGB" es necesaria para obtener los colores correctos. Información cortesía de Wolfgang Hugemann de la lista de correo de Magick-Users.


Datos RGB y Gris en Bruto

ImageMagick tiene algunos formatos de archivo para tratar con datos de imagen en bruto, en concreto "RGB:" y "GRAY:". Además de proporcionar ajustes que definen esos datos. Por ejemplo, para generar datos RGB en bruto...

  magick image.jpg -depth 8  image.rgb

El ajuste "[-depth](https://imagemagick.org/command-line-options/#depth)" especifica el tamaño de los enteros escritos (y leídos después). En este caso, valores de 8 bits con 3 bytes por píxel para RGB (una imagen de 24 bits). Especificar una profundidad apropiada siempre se recomienda al manejar datos de imagen en bruto. Un "[-depth](https://imagemagick.org/command-line-options/#depth)" de 16 bits producirá 2 bytes por valor, en cuyo caso puede que también necesites especificar el "[-endian](https://imagemagick.org/command-line-options/#endian)" u orden de bytes, ya sea 'MSB' (el byte más significativo primero) o 'LSB' (el byte menos significativo primero, el predeterminado). Nota que rgb son puramente los datos de la imagen, ¡ni siquiera contiene el ancho y el alto de la imagen! Algunas aplicaciones 'asumen' que los datos tienen un tamaño específico, así que puede que necesites usar IM para asegurar que los datos tengan este tamaño. Por ejemplo, esto redimensiona y rellena la imagen para asegurar que tenga 512x512 píxeles de tamaño.

  magick image.jpg -resize \>512x512 \
          -background black -gravity center -extent 512x512 \
          -depth 8  image.rgb

Al leer datos RGB (o GRAY) en bruto en ImageMagick, necesitarás especificar cómo de grande es la imagen. Por ejemplo..

  magick -size 512x512 -depth 8 image.rgb    image.png

Esto definirá exactamente cuántos datos leerá ImageMagick. A veces, los datos en bruto pueden tener adjunta información de cabecera extra. Para permitir que IM se salte esta información, puedes especificar un 'byte_offset' en el ajuste "[-size](https://imagemagick.org/command-line-options/#size)". Por ejemplo, saltar una cabecera de 48 bytes...

  magick -size 512x512+48 -depth 8 image.rgb    image.png

Esta es la única vez que sé que IM hará uso de un tercer número en el ajuste "[-size](https://imagemagick.org/command-line-options/#size)". Para más ejemplos de uso de datos de imagen en bruto (escala de grises), consulta el tema del foro de discusión de IM How to convert raw image to compressed tif?.

Datos de Punto Flotante

También puedes leer (y escribir) RGB usando números de punto flotante
normalizados. Esto, sin embargo, requiere el uso de ajustes especiales -define
del codificador. Consulta los formatos de archivo de punto flotante HDRI
   https://usage.imagemagick.org/basics/#hdri_formats


Imagen RGB de punto flotante generada usando código C (HDRI)...

   float red = 1.0f;
   float green = 1.0f;   /* appropriate data */
   float blue = 1.0f;

   /* for exach pixel in image... */
   fwrite (&red, sizeof(float), 1, file);
   fwrite (&green, sizeof(float), 1, file);
   fwrite (&blue, sizeof(float), 1, file);

Opciones de Lectura....

  magick -size 200x100 -depth 32 -define quantum:format=floating-point
          -define quantum:scale=65536.0   -endian lsb   input.rgb
          output.png

El quantum:format define que se lean números de punto flotante del archivo.
Mientras que el -depth define el tamaño del punto flotante (32 = floats, 64 = doubles).

El quantum:scale define cómo escalar los números de punto flotante desde los
valores normalizados de 0.0 a 1.0 a los niveles de calidad de 16 bits en memoria
que necesita mi versión Q16 de IM.