Tengo que lidiar con archivos JPEG CMYK extraídos de una fuente PDF. Los PDF fueron creados con Photoshop.
El problema es que Photoshop almacena datos JPEG CMYK en PDF/EPS utilizando valores "normales", mientras que en archivos JPEG independientes almacena valores invertidos. Por lo tanto, cuando los flujos de DCTDecode se extraen por bytes y se escriben en el disco, los archivos JPEG resultantes aparecen invertidos.
(La extracción real la realiza una utilidad interna, que simplemente extrae los bytes del flujo de DCTDecode y los escribe, sin modificar, en un archivo que termina en Es básicamente .jpg
un copiar y pegar binario. Los archivos PDF están disponibles para re- proceso, en caso de que sea necesario).
Como las imágenes deben permanecer en su formato JFIF, ¿hay alguna forma de colocar un marcador en el .jpg
archivo extraído para que Photoshop lo abra con la codificación adecuada? El proceso debe ser sin pérdidas (no involucrar más codificación de entropía).
Los archivos JPEG ya contienen el APP14
marcador y eliminarlo no tiene ningún efecto.
A continuación se muestra una cita de los libjpeg
documentos:
"... parece que Adobe Photoshop escribe datos invertidos en archivos CMYK JPEG: 0 representa una cobertura de tinta del 100 %, en lugar de un 0 % de tinta como cabría esperar... Photoshop 3.0 [y más reciente]... escriba YCCK no invertido en archivos EPS/JPEG... (Pero la polaridad de datos utilizada en archivos JPEG simples no cambiará...)"
Aquí en los foros de Adobe hay el 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 simplemente estar ahí. En etiquetas JPEG: http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/JPEG.html#Adobe
El segmento "Adobe" APP14 almacena información de codificación de imágenes para filtros DCT. Este segmento se puede copiar o eliminar como un bloque utilizando la etiqueta adicional "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 que alguien dijo que estos marcadores privados no están destinados a guiar a los lectores de PDF, pero deberían ser matrices de decodificación adecuadas.
La magia parece ser
/Decodificar 0 1 0 1 0 1 0 1
lo que invertiría el mapeo de color. (Supongo que es un indicador en libjpeg, algo similar debería estar disponible en cualquier herramienta similar). Las matrices de decodificación son comunes en archivos PDF de acuerdo con la referencia de PDF aquí: http://partners.adobe.com/public/developer/en/pdf /PDFReferencia.pdf
No tengo ni idea de si puede agregar estas matrices de decodificación en PDF JPEG o si necesita agregar eso al procesamiento de flujo de su herramienta interna. No tengo un PDF de ejemplo para trabajar, por lo que no puedo investigar más (además, la referencia es enorme, tl; dr, pero es posible que deba hacerlo ...)
/Decode
elemento del diccionario de Image XObject en [1 0 1 0 1 0 1 0]
./Decode
elemento está presente, es posible que pueda intercambiar los 0 y los 1. No pude adivinar cuál es su caso de uso, pero si está extrayendo un JPEG de un PDF, creo la herramienta de extracción realmente debería manejar esto...pdfimages
para extraer imágenes de PDF. En algunos casos, los archivos JPG están invertidos. Podría cambiar bytes en esos archivos, pero no sé dónde encontrar la \Decode
parte. Todavía no entiendo si es un parámetro para una herramienta o un fragmento de datos dentro de un JPG.../Decode
está (o mejor dicho, puede estar) en el PDF. Puede intentar intercambiar los 0 y los 1 en el PDF antes de ejecutar pdfimages, si el /Decode
elemento está presente. Alternativamente, puede agregar (o eliminar) el APP14 del PDF extraído. Si puede compartir el PDF, puedo intentar echarle un vistazo rápido.(Descargo de responsabilidad: no tengo una imagen para probar; si pudiera compartir una imagen de este tipo en un sitio de intercambio de 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 comando se puede usar así para incrustar un perfil ICC:
convert cmyk.jpg -profile USWebCoatedSWOP.icc cmyk_w_icc.jpg
Opcionalmente, conviértalo a un espacio de color RGB nativo.
Vea aquí para más detalles:
http://www.imagemagick.org/Usage/formats/#color_profile
Puede descargar perfiles ICC desde aquí:
http://www.adobe.com/support/downloads/detail.jsp?ftpID=4074
Puedes invertir los colores con ImageMagick :
convert input.jpg -negate output.jpg
El resultado se ve bien, pero puede que no sea sin pérdidas. Al menos, el tamaño del archivo parece ser significativamente menor en algunos casos.
e100
e100
e100
Horacio
Horacio
Horacio
Ars Mágica