⚠️ Este é um site de tradução não oficial, sem relação com a ImageMagick Studio LLC. Para informações oficiais, consulte a página original (https://imagemagick.org/color-management/).

Gerenciamento de Cores

Devido à padronização do sRGB na Internet, a maioria dos formatos de imagem usa o sRGB como espaço de cor de trabalho padrão. Se o espaço de cor de uma imagem for desconhecido e ela estiver em um formato de imagem de 8 a 16 bits, supor que ela esteja no espaço de cor sRGB é uma escolha segura. Isso se estende também à escala de cinza. Supomos uma escala de cinza não linear. Essas suposições são substituídas caso um determinado formato de imagem inclua metadados de espaço de cor e/ou gama. O ImageMagick supõe cor linear se o espaço de cor for RGB em vez de sRGB. Você também pode substituir as suposições padrão de espaço de cor com perfis de cor ou com a opção -set.

O ImageMagick suporta perfis de cor, porém, para imagens sem um perfil ou uma declaração de espaço de cor, o ImageMagick supõe sRGB não linear. A maioria dos algoritmos de processamento de imagem supõe um espaço de cor linear, portanto pode ser prudente converter para cor linear ou remover a função gama antes de aplicar certos algoritmos de processamento de imagem. Por exemplo,

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

Para declarar que uma imagem é RGB linear em vez de sRGB, você pode usar a opção set:

magick myimage.png -set colorspace RGB myRGBimage.png

Observe que declarar uma imagem como linear não é o mesmo que converter a imagem para linear. Declará-la como linear apenas define os metadados e não altera os dados dos pixels. Já a conversão para linear de fato altera os dados dos pixels, conforme descrito em mais detalhes abaixo.

Em seguida, as informações detalhadas (verbose) do arquivo de saída listam o espaço de cor como RGB. Isso só funciona em tipos de imagem que contêm metadados que distinguem entre RGB linear e sRGB não linear, como PNG e GIF. Portanto, se o comando acima for executado com um formato de saída JPG ou TIF, as informações detalhadas do espaço de cor ainda mostrarão sRGB. Para que a saída JPG saiba corretamente que ela é RGB linear, inclua um perfil de cor apropriado.

Por padrão, converter imagens coloridas para escala de cinza retorna cinza não linear. Para, em vez disso, converter para cinza linear, use as opções -set, -intensity ou -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

Observe que LinearGray é uma novidade a partir do ImageMagick 6.9.9-29 e 7.0.7-17.

O mesmo conceito é necessário ao separar canais. Normalmente, a conversão para separar cada canal de uma imagem colorida sRGB produz imagens em escala de cinza não linear separadas. Entretanto, o mesmo conceito pode ser aplicado, caso se deseje manter os canais separados como escala de cinza linear. Por exemplo, o seguinte produz canais em escala de cinza linear.

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

Ao separar e recombinar canais, com possível processamento intermediário, é importante identificar o espaço de cor usado, especialmente durante a recombinação. Por exemplo,

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

No exemplo acima, os canais separados são não lineares e o padrão para -combine é supor canais não lineares. Portanto, o resultado é o mesmo da entrada.

Se alguém desejar separar em canais de escala de cinza linear e recombiná-los depois de volta em cor não linear, talvez após algum processamento, então use o mesmo conceito acima para manter a escala de cinza linear:

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

Ao converter para outro espaço de cor e voltar, como entre sRGB e HSL, os dois comandos a seguir tratam o primeiro caso de canais não lineares e o segundo caso de canais lineares:

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

A maioria dos formatos de imagem supõe um espaço de cor sRGB (por exemplo, JPEG, PNG etc.). Alguns suportam apenas RGB linear (por exemplo, EXR, DPX, CIN, HDR) ou apenas GRAY linear. Alguns formatos suportam CMYK. Por exemplo, o JPG suporta, mas o PNG não. Há também o formato ocasional que também suporta LAB (ou seja, CIELAB) (por exemplo, TIFF, PSD, JPG, JP2). Para informações adicionais, consulte as páginas Colorspace e Formatos Suportados.

Ao especificar cores individuais como rgb(...) ou hexadecimal, essas cores ainda serão interpretadas como não lineares, isto é, como cores sRGB. Entretanto, se você quiser criar cores lineares, use icc-color(rgb,r,g,b), onde r, g e b estão na faixa de 0 a 1. Consulte a página Color.