Los archivos JPEG CMYK extraídos de PDF aparecen invertidos

8

Tengo que lidiar con archivos JPEG CMYK extraídos de una fuente PDF. Los PDF se crearon con Photoshop.

El problema es que Photoshop almacena datos JPEG CMYK en PDF / EPS utilizando valores "normales", mientras que en JPEG independientes almacena valores invertidos. Por lo tanto, cuando las secuencias DCTDecode se extraen por bytes y se escriben en el disco, los archivos JPEG resultantes aparecen invertidos.

(La extracción real se realiza mediante una utilidad interna, que simplemente extrae los bytes de la secuencia DCTDecode y los escribe, sin modificar, en un archivo que termina en .jpgEs básicamente un copiar y pegar binario. Los archivos PDF están disponibles para volver a proceso, si fuera necesario).

Como las imágenes deben permanecer en su formato JFIF, ¿hay alguna forma de colocar un marcador en el .jpgarchivo extraído para que Photoshop lo abra con la codificación adecuada? El proceso debe ser sin pérdidas (no implica más codificación de entropía).

Los archivos JPEG ya contienen el APP14marcador, y eliminarlo no tiene ningún efecto.

A continuación hay una cita de los libjpegdocumentos:

"... parece que Adobe Photoshop escribe datos invertidos en archivos CMYK JPEG: 0 representa el 100% de cobertura de tinta, en lugar del 0% de tinta como cabría esperar ... Photoshop 3.0 [y más reciente] ... escribe YCCK no invertido en archivos EPS / JPEG ... (Pero la polaridad de datos utilizada en archivos JPEG desnudos no cambiará ...) "


fuente
2
¿No puede simplemente automatizar por lotes la conversión de los archivos JPEG exportados a codificación CMYK normal? ¿Por qué necesita marcar los archivos extraídos? ¿Dice que todos los archivos PDF se crearon en Photoshop?
e100
¿Cómo extrae los archivos JPEG de los archivos PDF? ¿Ya tiene una carpeta que contiene muchos archivos JPEG que deben convertirse? Sería bueno agregar esta información a su pregunta original.
e100
Si está extrayendo los datos JPEG mediante programación, ¿también puede automatizar la aritmética necesaria en los valores de color al mismo tiempo? No estoy seguro de lo fácil que es esto. Sí, tiene razón, realmente me preguntaba si usted tenía el control del proceso de extracción, o si simplemente tenía que manejar su salida
e100
@unsigned: si los valores de color se almacenan como flotantes, podría haber grandes errores, pero si se almacenan como enteros, invertirlos no debería ser tan problemático. Siento que has omitido parte del flujo de trabajo en tu pregunta. Sin embargo, tenga en cuenta que CMYK no es compatible con el formato JPEG, sino JPG2000. No sé si esto hace una diferencia para su elección de bibliotecas ...
Horacio
2
Me refiero al estándar JFIF original que admite 1 o 3 colores (24 bits). La falta de soporte CMYK se rectificó en un estándar posterior. Solía ​​ser un problema cuando las personas creaban archivos jpegs de fuentes CMYK e intentaban usarlos en sitios web. En cuanto al flujo de trabajo, se opuso a la sugerencia de e100 de utilizar la automatización por lotes. Photoshop lo admite. Si los colores simplemente se invierten, Photoshop puede ejecutar un proceso por lotes como "abrir, invertir, guardar como" en un número arbitrario de archivos.
Horacio

Respuestas:

5

Aquí en los foros de Adobe hay un mismo problema con resultados exitosos: http://forums.adobe.com/message/4271028

¿Quizás la etiqueta APP14 no es correcta? Hay más en las etiquetas APP14 que solo estar allí. En etiquetas JPEG: http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/JPEG.html#Adobe

JPEG Adobe Tags

El segmento APP14 "Adobe" almacena información de codificación de imágenes para filtros DCT. Este segmento puede copiarse o eliminarse como un bloque usando la etiqueta Extra "Adobe", pero tenga en cuenta que no se elimina de forma predeterminada al eliminar todos los metadatos porque puede afectar la apariencia de la imagen.

╔════════╦══════════════════╦══════════╦════════════════════════════════════════════╗
║ 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                                   ║
╚════════╩══════════════════╩══════════╩════════════════════════════════════════════╝

Pero eso podría no ayudar, recuerdo a alguien que dijo que estos marcadores privados no están destinados a guiar a los lectores de PDF, sino que deberían ser arreglos de decodificación adecuados.

La magia parece ser

/ Decodificar 0 1 0 1 0 1 0 1

que invertiría el mapeo de color. (Supongo que eso es una bandera en libjpeg, algo similar debería estar disponible en cualquier herramienta similar). Las matrices de decodificación son comunes en los PDF de acuerdo con la referencia en PDF aquí: http://partners.adobe.com/public/developer/en/pdf /PDFReference.pdf

No tengo ni idea de si puede agregar estas matrices de decodificación en archivos PDF JPEG o si necesita agregarlas al procesamiento continuo de su herramienta interna. No tengo un PDF de ejemplo en el que trabajar, así que no puedo investigar más (también, la referencia es enorme, tl; dr, pero es posible que tengas que ...)

Ars Magika
fuente
1
Esto me ayudó a obtener un Photoshop CMYK JPEG incrustado en un PDF para mostrarlo correctamente. Tuve que configurar el elemento del diccionario de Image XObject /Decodeen [1 0 1 0 1 0 1 0].
Brecht Machiels
Esto también me ayudó, y puedo verificar que los archivos JPEG CMYK que se invirtieron ahora se procesan correctamente. Los RGB no necesitan esto para mí ... Sin embargo, tengo una pregunta, ¿será esto cierto para TODAS las imágenes CMYK, no solo para algunas? Además, ¿esto (siempre) se imprimirá correctamente? (Por lo tanto, no solo para la pantalla)
Marius
0

(Descargo de responsabilidad: no tengo una imagen para probar; si pudiera compartir dicha imagen en un sitio para compartir archivos, puedo probar y hacer ajustes para responder si es necesario).

Lo más probable es que el problema esté relacionado con la falta del perfil ICC.

Para incrustar (o convertir) dicho perfil, puede usar f.ex. ImageMagick para hacer esta pérdida de archivos sin afectar los datos.

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

La utilidad de línea de comandos se puede usar como esto para incrustar un perfil ICC:

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

Opcionalmente conviértalo a espacio de color RGB nativo.

Ver aquí para más detalles:
http://www.imagemagick.org/Usage/formats/#color_profile

Puede descargar los perfiles ICC desde aquí:
http://www.adobe.com/support/downloads/detail.jsp?ftpID=4074


fuente