Os JPEGs CMYK extraídos do PDF aparecem invertidos

8

Estou tendo que lidar com JPEGs CMYK extraídos de uma fonte PDF. Os PDFs foram criados com o Photoshop.

O problema é que o Photoshop armazena dados JPEG CMYK em PDF / EPS usando valores "normais", enquanto que em JPEGs independentes ele armazena valores invertidos. Portanto, quando os fluxos DCTDecode são extraídos no sentido horário e gravados no disco, os arquivos JPEG resultantes aparecem invertidos.

(A extração real é feita por um utilitário interno, que simplesmente extrai os bytes do fluxo DCTDecode e os grava, sem modificações, em um arquivo que termina em .jpgÉ basicamente uma cópia e cola binária. Os PDFs estão disponíveis para processo, caso seja necessário.)

Como as imagens devem permanecer no formato JFIF, existe alguma maneira de colocar um marcador no .jpgarquivo extraído para fazer o Photoshop abri-lo com a codificação adequada? O processo deve ser sem perdas (não envolve codificação adicional de entropia).

Os JPEGs já contêm o APP14marcador e sua remoção não tem efeito.

Abaixo está uma citação dos libjpegdocumentos:

"... parece que o Adobe Photoshop grava dados invertidos em arquivos JPEG CMYK: 0 representa 100% de cobertura de tinta, em vez de 0% de tinta conforme o esperado. ... Photoshop 3.0 [e mais recente] ... grava YCCK não invertido em arquivos EPS / JPEG ... (Mas a polaridade dos dados usada em arquivos JPEG nulos não muda ...) "


fonte
2
Você não pode automatizar em lote a conversão dos JPEGs exportados de volta para a codificação CMYK normal? Por que você precisa sinalizar os arquivos extraídos - você diz que todos os PDFs foram criados no Photoshop?
e100
Como você está extraindo os JPEGs dos PDFs? Você já tem uma pasta contendo muitos JPEGs que precisam ser convertidos? Seria bom adicionar essas informações à sua pergunta original.
e100
Se você estiver extraindo os dados JPEG de forma programática, também pode automatizar a aritmética necessária nos valores de cores ao mesmo tempo? Não tenho certeza de como isso é fácil. Sim, você está certo, eu estava realmente me perguntando se você tinha controle do processo de extração ou apenas teve que lidar com sua saída
e100
@unsigned: se os valores de cores forem armazenados como flutuantes, poderá haver grandes erros, mas se eles forem armazenados como números inteiros, a inversão deles não será tão problemática. Sinto que você deixou de fora parte do fluxo de trabalho da sua pergunta. Observe, no entanto, que o formato JPEG não é suportado por CMYK, mas pelo contrário o JPG2000. Eu não sei se isso faz a diferença para a sua escolha de bibliotecas ... #
311 horatio
2
Refiro-me ao padrão JFIF original que suporta 1 ou 3 cores (24 bits). A falta de suporte ao CMYK foi corrigida em um padrão posterior. Costumava ser um problema quando as pessoas criavam jpegs a partir de fontes CMYK e tentavam usá-los em sites. Quanto ao fluxo de trabalho, você se opôs à sugestão do e100 de usar a automação em lote. O Photoshop suporta isso. Se as cores forem simplesmente invertidas, o Photoshop poderá executar um processo em lote como "abrir, inverter, salvar como" em um número arbitrário de arquivos.
horatio

Respostas:

5

Aqui nos fóruns da Adobe, há um mesmo problema com resultados bem-sucedidos: http://forums.adobe.com/message/4271028

Talvez a tag APP14 não esteja correta? Há mais tags APP14 do que apenas estar lá. Em tags JPEG: http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/JPEG.html#Adobe

Tags Adobe Adobe

O segmento APP14 "Adobe" armazena informações de codificação de imagem para filtros DCT. Esse segmento pode ser copiado ou excluído como um bloco usando a tag "Adobe" extra, mas observe que ele não é excluído por padrão ao excluir todos os metadados, pois pode afetar a aparência da imagem.

╔════════╦══════════════════╦══════════╦════════════════════════════════════════════╗
║ Index2 ║     Tag Name     ║ Writable ║               Values / Notes               ║
╠════════╬══════════════════╬══════════╬════════════════════════════════════════════╣
║      0 ║ DCTEncodeVersion ║ N        ║                                            ║
║      1 ║ APP14Flags0      ║ N        ║ Bit 15 = Encoded with Blend=1 downsampling ║
║      2 ║ APP14Flags1      ║ N        ║                                            ║
║      3 ║ ColorTransform   ║ N        ║ 0 = Unknown (RGB or CMYK)                  ║
║        ║                  ║          ║ 1 = YCbCr                                  ║
║        ║                  ║          ║ 2 = YCCK                                   ║
╚════════╩══════════════════╩══════════╩════════════════════════════════════════════╝

Mas isso pode não ajudar, lembro-me de alguém afirmando que esses marcadores particulares não têm a intenção de orientar os leitores de PDF, mas sim as matrizes de decodificação adequadas.

A mágica parece ser

/ Decodificar 0 1 0 1 0 1 0 1

o que inverteria o mapeamento de cores. (Acho que é um sinalizador no libjpeg, algo semelhante deve estar disponível em qualquer ferramenta similar.) Arrays de decodificação são comuns em PDFs de acordo com a Referência em PDF aqui: http://partners.adobe.com/public/developer/en/pdf /PDFReference.pdf

Não faço idéia se você pode adicionar essas matrizes de decodificação em JPEGs PDF ou precisa adicioná-lo ao processamento de fluxo da sua ferramenta interna. Não tenho um exemplo de PDF para trabalhar, portanto não posso fazer mais pesquisas (também, a referência é enorme - tl; dr - mas você pode precisar ..)

Ars Magika
fonte
1
Isso me ajudou a incorporar um Photoshop CMYK JPEG em um PDF para exibir corretamente. Eu tive que definir o /Decodeitem de dicionário do Image XObject para [1 0 1 0 1 0 1 0].
Brecht Machiels
Isso também me ajudou, e posso verificar que os JPEGs CMYK que foram invertidos agora são renderizados corretamente. As RGB não precisam disso para mim ... No entanto, tenho uma pergunta: será verdade para TODAS as imagens CMYK, não apenas para algumas? Além disso, isso (sempre) será impresso corretamente? (Portanto, não apenas para a tela) #
1178 Marius
0

(Dislaimer: não tenho imagem para testar - se você puder compartilhá-la em um site de compartilhamento de arquivos, posso testar e fazer ajustes para responder, se necessário).

O problema está provavelmente relacionado à falta do perfil ICC.

Para incorporar (ou converter) esse perfil, você pode usar f.ex. ImageMagick para fazer esses arquivos de perda sem afetar os dados.

ImageMagick:
http://imagemagick.org/script/index.php

O utilitário de linha de comando pode ser usado como este para incorporar um perfil ICC:

convert cmyk.jpg -profile USWebCoatedSWOP.icc cmyk_w_icc.jpg

Opcionalmente, converta-o para o espaço de cores RGB nativo.

Veja aqui para mais detalhes:
http://www.imagemagick.org/Usage/formats/#color_profile

Você pode fazer o download dos perfis ICC aqui:
http://www.adobe.com/support/downloads/detail.jsp?ftpID=4074


fonte