Como converter imagens RGB para CMYK em GNU/Linux

Para trabalhos impressos, pode ser necessário trabalhar com imagens no espaço de cor CMYK, em vez de RGB, especialmente se não se usa o Scribus. A conversão do formato RGB para CMYK pode ser feita com o pacote ImageMagick, através do utilitário ‘convert‘:

convert catwoman.tif -profile ~/.color/icc/CMYK/UncoatedFOGRA29.icc catwoman-cmyk.tif

Os perfis de cor pessoais ficam na pasta ~/.color/icc/. Baixe perfis de cor da Adobe e descompacte-os nesta pasta. Use um perfil para cada tipo de papel (offset comum, couché, couché fosco, papel jornal, etc).

O resultado é uma imagem CMYK com perfil de cor embutido. Muito próximo ao obtido pelo Scribus. As imagens abaixo mostram as diferenças de imagem nos espaços de cor CMYK e RGB no preview de impressão do Scribus.

Só funciona bem a conversão para imagens TIFF, pois JPG não usa espaço de cor CMYK, mas YCrCb (ver comentário depois deste artigo).

Saída da tinta preta, sem perfil de cor

Saída da tinta preta, sem perfil de cor.

Saída da tinta preta, perfil de cor processado.

Saída da tinta preta, perfil de cor processado.

Saída de ciano, amarelo e magenta, sem perfil de cor

Saída de ciano, amarelo e magenta, sem perfil de cor

Saída de ciano, amarelo e magenta, perfil de cor processado.

Saída de ciano, amarelo e magenta, perfil de cor processado.

Como se pode ver, a saída da foto TIFF CMYK (foto superior) é praticamente igual à saída JPG RGB (foto inferior), no preview do Scribus, denotando que o ImageMagick faz uma boa conversão.

Conversão CMYK em Python

Programaticamente, posso fazer a conversão com a Python Image Library (PIL) 1.1.7, que já incorpora interface com o littlecms, sistema gerenciador de cores (CMS) de código aberto. Essa biblioteca não é instalada por default em Python. É necessário baixá-la e instalá-la.

# Importo os módulos PIL
import Image
import ImageCms
# carrego a imagem
encoding = sys.getfilesystemencoding()
file = 'fotão.jpg'
image = Image.open(file.encode(encoding)) # encode to let PIL handle accented filenames
# Crio a transformação com perfis de cor
# Estes caminhos são para Windows.
# No Linux, os perfis ficam em /usr/share/color/icc ou ~/color/icc
# é preciso saber exatamente o perfil de cor original da imagem
transform = ImageCms.buildTransform(
'c:\WINDOWS\system32\spool\drivers\color\AdobeRGB1998.icc',
'c:\WINDOWS\system32\spool\drivers\color\ISOuncoated.icc',
"RGB", "CMYK", ImageCms.INTENT_PERCEPTUAL
)
# Aplico a transformação à imagem.
# O comando PIL "image = image.convert('CMYK')" não pode ser usado porque
# não trabalha com perfis de cores e não gera a chapa de preto,
# cria preto com 100% Ciano, 100% Magenta e 100% Yellow.
image = applyTransform(image, transform, inPlace=1)
# Salvo a imagem a 300 dpi
file2 = 'fotão.tiff' # Não use JPEG para imagens CMYK
image.save(file2.encode(encoding),dpi=(300,300))

Esqueça conversão: use o Scribus

O Scribus não precisa disto, porque converte RGB para CMYK automaticamente (embute perfis de cor na saída PDF/X-3). Mas outros programas, como PageMaker, precisam de imagens já no espaço de cor CMYK, para impressão.

Bibliografia

About José Antonio Meira da Rocha

Jornalista, professor das áreas de Editoração e de Mídias Digitais na Universidade Federal de Santa Maria, campus cidade de Frederico Westphalen, Rio Grande do Sul, Brasil. Doutor em Design pelo Programa de Pós-Graduação em Design (PGDesign)/Universidade Federal do Rio Grande do Sul (UFRGS), Porto Alegre, Brasil, 2023. Mestre em Mídias pela UNISINOS, São Leopoldo, RS, Brasil, 2003. Especialista em Informática na Educação, Unisinos, 1976.