⚠️ 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://imagemagick.org/color-management/).

Gestión del color

Debido a la estandarización de sRGB en Internet, la mayoría de los formatos de imagen utilizan sRGB como espacio de color de trabajo predeterminado. Si se desconoce el espacio de color de una imagen y se trata de un formato de imagen de 8 a 16 bits, suponer que está en el espacio de color sRGB es una elección segura. Esto se extiende también a la escala de grises. Suponemos una escala de grises no lineal. Estas suposiciones quedan anuladas si un formato de imagen concreto incluye metadatos de espacio de color o de gamma. ImageMagick supone color lineal si el espacio de color es RGB en lugar de sRGB. También puede anular las suposiciones predeterminadas del espacio de color con perfiles de color o con la opción -set.

ImageMagick admite perfiles de color, sin embargo, para las imágenes sin perfil ni declaración de espacio de color, ImageMagick supone sRGB no lineal. La mayoría de los algoritmos de procesamiento de imágenes suponen un espacio de color lineal, por lo que podría ser prudente convertir a color lineal o eliminar la función de gamma antes de aplicar ciertos algoritmos de procesamiento de imágenes. Por ejemplo,

magick myimage.jpg -colorspace RGB -resize 200% -colorspace sRGB mybigimage.jpg

Para declarar que una imagen es RGB lineal en lugar de sRGB, puede usar la opción set:

magick myimage.png -set colorspace RGB myRGBimage.png

Tenga en cuenta que declarar una imagen como lineal no es lo mismo que convertir la imagen a lineal. Declararla como lineal solo establece los metadatos y no cambia los datos de los píxeles. En cambio, convertir a lineal cambia realmente los datos de los píxeles, como se describe con más detalle a continuación.

Después, la información detallada (verbose) del archivo de salida indica el espacio de color como RGB. Esto solo funciona en tipos de imagen que contienen metadatos que distinguen entre RGB lineal y sRGB no lineal, como PNG y GIF. Por lo tanto, si el comando anterior se ejecuta con un formato de salida JPG o TIF, la información detallada del espacio de color sigue mostrando sRGB. Para que la salida JPG reconozca correctamente que es RGB lineal, incluya un perfil de color apropiado.

De forma predeterminada, convertir imágenes en color a escala de grises devuelve gris no lineal. Para convertir en su lugar a gris lineal, use las opciones -set, -intensity o -grayscale:

convert myimage.png -colorspace LinearGray myRGBimage.png
convert myimage.png -colorspace RGB -colorspace Gray myRGBimage.png
convert myimage.png -intensity Rec709luminance -colorspace gray myRGBimage.png
convert myimage.png -grayscale Rec709luminance myRGBimage.png

Tenga en cuenta que LinearGray es nuevo a partir de ImageMagick 6.9.9-29 y 7.0.7-17.

El mismo concepto es necesario al separar canales. Normalmente, la conversión para separar cada canal de una imagen en color sRGB produce imágenes en escala de grises no lineales independientes. Sin embargo, se puede aplicar el mismo concepto si se desea mantener los canales separados como escala de grises lineal. Por ejemplo, lo siguiente produce canales en escala de grises lineal.

magick myimage.png -colorspace RGB -separate myimage_channels_%d.png

Al separar y recombinar canales, con un posible procesamiento intermedio, es importante identificar el espacio de color utilizado, especialmente durante la recombinación. Por ejemplo,

magick myimage.png -separate myimage_channels_%d.png
magick myimage_channels_*.png -combine myimage2.png

En el ejemplo anterior, los canales separados son no lineales y el valor predeterminado de -combine es suponer canales no lineales. Por lo tanto, el resultado es el mismo que la entrada.

Si se desea separar en canales de escala de grises lineal y recombinarlos más tarde en color no lineal, quizá después de algún procesamiento, use el mismo concepto que el anterior para mantener la escala de grises lineal:

magick myimage.png -set colorspace RGB -separate myimage_channels_%d.png
magick myimage_channels_*.png -set colorspace RGB -combine -colorspace sRGB myimage2.png

Al convertir a otro espacio de color y de vuelta, como entre sRGB y HSL, los dos comandos siguientes manejan el primer caso de canales no lineales y el segundo caso de canales lineales:

magick myimage.png -colorspace HSL -separate myimage_channels_%d.png
magick myimage_channels_*.png -set colorspace HSL -combine -colorspace sRGB myimage2.png


magick myimage.png -set colorspace RGB -colorspace HSL -separate myimage_channels_%d.png
magick myimage_channels_*.png -set colorspace HSL -combine -colorspace RGB -set colorspace sRGB myimage2.png

La mayoría de los formatos de imagen suponen un espacio de color sRGB (p. ej., JPEG, PNG, etc.). Algunos admiten solo RGB lineal (p. ej., EXR, DPX, CIN, HDR) o solo GRAY lineal. Algunos formatos admiten CMYK. Por ejemplo, JPG sí lo hace, pero PNG no. Luego está el formato ocasional que también admite LAB (es decir, CIELAB) (p. ej., TIFF, PSD, JPG, JP2). Para obtener información adicional, consulte las páginas Colorspace y Formatos compatibles.

Al especificar colores individuales como rgb(...) o en hexadecimal, estos colores se seguirán interpretando como no lineales, es decir, como colores sRGB. Sin embargo, si se desea crear colores lineales, use icc-color(rgb,r,g,b), donde r, g y b están en el rango de 0 a 1. Consulte la página Color.