Pular para o conteúdo
getnextpdf.com

Cor, perfis e por que o seu vermelho não é o meu vermelho

Spec: ISO 32000-2, §8.6Spec: ISO 15930, PDF/X

Uma cor em um PDF não é uma sensação fixa. Ela é uma instrução, e se essa instrução produz o mesmo vermelho no seu laptop, em um celular e em uma impressora gráfica depende inteiramente de como a cor foi descrita. Esta página trata da diferença entre uma cor que apenas diz a um dispositivo o que fazer e uma cor que diz como ela deve de fato se parecer.

Escolha um vermelho de marca. Defina-o uma vez. Agora olhe para ele em um monitor de escritório barato, depois em um celular OLED em uma sala iluminada e então saído de uma impressora offset. Três vermelhos. Às vezes três vermelhos obviamente diferentes. Ninguém mudou o número; o número nunca foi a história inteira.

Para um documento informal, você dá de ombros. Para um logotipo, um rótulo regulamentado, uma fotografia em um catálogo ou um registro destinado a sobreviver por décadas, uma cor que se desloca é um defeito. O custo não é abstrato: é uma reimpressão, uma prova rejeitada ou um arquivo cujas páginas não correspondem mais aos originais. A correção não é um número melhor. É dizer a verdade sobre o que o número significa.

  • A cor de dispositivo nomeia uma cor pelos valores de controle que um dispositivo recebe, então o resultado é o que aquele dispositivo fizer deles (Spec: ISO 32000-2, §8.6.4). DeviceRGB, DeviceCMYK e DeviceGray são espaços de cor de dispositivo. Mesmos números, hardware diferente, cor diferente.
  • A cor calibrada, baseada em ICC amarra esses números a uma referência medida e independente de dispositivo por meio de um perfil incorporado (Spec: ISO 32000-2, §8.6.5.5). Agora o documento carrega informação suficiente para reproduzir a cor pretendida, não apenas uma receita de valores de controle.
  • Um perfil ICC é esse mapeamento medido: como os números de um dispositivo — ou os de um espaço de cor padrão ou condição de saída — se relacionam com a cor que um olho humano perceberia, ancorados a um espaço de conexão independente de dispositivo.
  • Um rendering intent é a política para o que fazer quando uma cor está fora do alcance de um dispositivo, porque nenhum dispositivo consegue exibir todas as cores.
  • Um output intent é o documento declarando, de antemão, a condição de saída para a qual foi preparado (Spec: ISO 32000-2, §14.11.5). Os fluxos de trabalho de grau de impressão (PDF/X) e de arquivamento (PDF/A) dependem dele.

Comece pela versão honesta do problema. DeviceRGB não contém uma cor. Ele contém três números entre 0 e 1 e a suposição não dita de que alguma tela vai transformá-los em luz. Duas telas com retroiluminações diferentes, painéis diferentes e calibrações diferentes vão transformar os mesmos três números em luz visivelmente diferente. Isso não é um bug no PDF. É o que “cor de dispositivo” significa, e o padrão é franco quanto a isso: os espaços de cor de dispositivo são definidos pelos valores que um dispositivo recebe, não por uma aparência absoluta (Spec: ISO 32000-2, §8.6.4).

A cor calibrada fecha essa lacuna acrescentando uma referência. Um perfil ICC é o resultado de caracterizar um dispositivo ou espaço de cor — um monitor, uma impressora, uma gráfica ou um espaço padrão como sRGB — e registrar como seus números brutos se relacionam com a cor em um espaço de conexão independente de dispositivo que aproxima a visão humana. Incorpore esse perfil e os números deixam de ser um dialeto privado; eles se tornam uma afirmação ancorada a algo com que todos podem concordar. É exatamente isso que um espaço de cor baseado em ICC carrega (Spec: ISO 32000-2, §8.6.5.5): a cor, mais o mapeamento medido que diz o que ela significa.

Há um segundo detalhe, inevitável. O conjunto de cores que uma gráfica consegue imprimir não é o conjunto que um celular consegue exibir, e nenhum dos dois é o conjunto completo que o olho humano consegue ver. Quando uma cor cai fora do que um dispositivo de destino consegue reproduzir, alguma escolha precisa ser feita: recortá-la para a cor alcançável mais próxima, ou deslocar uma faixa inteira de cores em conjunto para que suas relações permaneçam intactas. Essa escolha é o rendering intent — uma política deliberada, escolhida para a tarefa, não um acidente de arredondamento. Uma fotografia e um logotipo corporativo frequentemente querem rendering intents diferentes, porque uma se importa com gradientes suaves e o outro se importa em acertar uma amostra exata.

Por fim, um documento que vai para algum lugar específico pode dizê-lo. Um output intent é o arquivo declarando a condição de saída para a qual foi preparado — tipicamente um perfil ICC de destino incorporado que nomeia uma condição de impressão ou dispositivo (Spec: ISO 32000-2, §14.11.5). É a diferença entre entregar um arquivo a uma impressora e entregar a ela um arquivo que diz “fui construído para esta gráfica.” Os perfis de troca para impressão o tornam obrigatório: um arquivo PDF/X (a família ISO 15930) é obrigado a carregar um output intent (Spec: ISO 15930, PDF/X), e o PDF/A se apoia no mesmo mecanismo para que as cores dependentes de dispositivo de um arquivo arquivado permaneçam interpretáveis muito no futuro, muito depois de o ambiente de origem ter desaparecido.

  1. Name the colourChoose a colour space. DeviceRGB/CMYK/Gray name control values; an ICC-based space anchors them to a device-independent reference (ISO 32000-2 §8.6).
  2. Anchor it (optional but decisive)Embed an ICC profile so the numbers carry their measured meaning, not just a device recipe (ISO 32000-2 §8.6.5.5).
  3. Reconcile to the deviceA rendering intent decides what happens to colours the target device cannot reproduce — clip the nearest, or shift the range to preserve relationships.
  4. Declare the destinationAn output intent states the output condition the document was prepared for, as PDF/X and PDF/A workflows require (ISO 32000-2 §14.11.5).
Como uma cor viaja do seu código até um resultado fiel: ela é nomeada em um espaço de cor, opcionalmente ancorada a uma referência medida por um perfil ICC, reconciliada com o dispositivo de destino por meio de um rendering intent e interpretada em relação à condição de saída que o documento declara.

A função do NextPDF nessa cadeia é ser correto em relação aos padrões: escrever os espaços de cor, os perfis incorporados e os output intents da forma como o formato os define, para que uma ferramenta a jusante — o RIP de uma impressora, um validador de arquivamento, um visualizador — leia exatamente o que foi pretendido. Ele produz as declarações; ele não finge ser o dispositivo.

A forma abaixo esboça a decisão, não uma API específica. O ponto é que o destino é declarado, não adivinhado.

<?php
declare(strict_types=1);
use NextPDF\Contracts\PdfDocumentInterface;
/**
* Prepare a print-bound document that declares its intended output condition.
*
* The colour numbers alone do not fix the appearance. Declaring the output
* intent — the print condition the file was built for — is what lets a press
* interpret those numbers faithfully (ISO 32000-2 §14.11.5).
*
* @param PdfDocumentInterface $doc A composed document.
* @param string $iccProfileBytes The destination ICC profile for the
* target print condition.
*
* @return string The document bytes, carrying a declared output intent.
*/
function prepareForPress(
PdfDocumentInterface $doc,
string $iccProfileBytes,
): string {
// Declare the output condition explicitly. The document now states the
// device/print condition it was prepared for, instead of leaving its
// device colours open to interpretation.
$doc->setOutputIntent(
identifier: 'Custom press condition',
iccProfile: $iccProfileBytes,
);
return $doc->output();
}

As cores não mudaram. O que mudou é que o arquivo agora diz como elas deveriam se parecer, que é a única coisa sobre a qual uma gráfica ou um validador podem agir.

“É o mesmo valor hexadecimal, então é a mesma cor.” O valor hexadecimal é um conjunto de valores de controle de dispositivo. Sem um perfil ou um output intent, ele é uma receita sem nenhuma cozinha especificada — ela terá um sabor diferente em cada uma. Dois arquivos podem carregar números RGB idênticos e ser honestamente cores diferentes, porque um declara o contexto que dá significado aos números e o outro deixa isso ao acaso.

Uma segunda armadilha: presumir que DeviceCMYK automaticamente significa “pronto para impressão.” Não significa. CMYK ainda é cor de dispositivo; ele tem o formato de uma gráfica, mas não é calibrado até que um perfil ou output intent nomeie a condição de impressão real.

O NextPDF produz cor correta em relação aos padrões: ele escreve espaços de cor de dispositivo e baseados em ICC e declara output intents para fluxos de trabalho no estilo PDF/X e PDF/A, da forma como o formato os define. Essa é a metade produtora do trabalho, e é a metade que um documento pode chamar de sua.

O que o NextPDF não é, é um sistema de prova de cor. Ele não mede o seu monitor, não faz prova virtual (soft-proof) de uma gráfica na tela, nem certifica que o resultado impresso corresponde a uma amostra pretendida dentro de uma tolerância. Essas tarefas pertencem a uma cadeia de prova com gestão de cor e às pessoas que a operam. O motor faz o arquivo dizer a coisa certa; se o dispositivo final a honra é decidido a jusante, pelo dispositivo, pelos perfis ICC em jogo e — para PDF/X e PDF/A — por um validador, não pelo produtor.

  • What a PDF actually is — o modelo de objetos dentro do qual esses espaços de cor e output intents vivem.
  • Archival and PDF/A — por que a preservação de longo prazo se apoia em cor independente de dispositivo e em output intents.
  • The standards landscape — onde a ISO 32000-2, o PDF/X (ISO 15930) e o PDF/A (ISO 19005) se situam uns em relação aos outros.
  • PDF 2.0: what changed — como a edição atual do formato enquadra a cor e a conformidade.
  • Espaço de cor de dispositivo — uma cor nomeada pelos valores de controle que um dispositivo recebe (DeviceRGB, DeviceCMYK, DeviceGray); a aparência depende do dispositivo que a interpreta (ISO 32000-2 §8.6.4).
  • Cor calibrada / baseada em ICC — cor ancorada a uma referência independente de dispositivo por meio de um perfil ICC incorporado, de modo que a aparência pretendida seja reproduzível entre dispositivos (ISO 32000-2 §8.6.5.5).
  • Perfil ICC — um mapeamento medido entre os números de um dispositivo específico e uma referência independente de dispositivo que aproxima a visão humana.
  • Rendering intent — a política para lidar com cores que um dispositivo de destino não consegue reproduzir: recortar para a cor alcançável mais próxima, ou deslocar uma faixa para preservar as relações de cor.
  • Output intent — a declaração do documento sobre a condição de saída para a qual foi preparado, tipicamente por meio de um perfil ICC de destino incorporado (ISO 32000-2 §14.11.5); exigido pelo PDF/X e usado pelo PDF/A.
  • PDF/X — a família de perfis de troca para impressão do PDF, sob a ISO 15930; um arquivo PDF/X deve carregar um output intent que nomeie a condição de impressão de destino.