Ich muss mich mit CMYK-JPEGs befassen, die aus einer PDF-Quelle extrahiert wurden. Die PDFs wurden mit Photoshop erstellt.
Das Problem ist, dass Photoshop JPEG-CMYK-Daten in PDF/EPS mit "normalen" Werten speichert, während es in eigenständigen JPEGs invertierte Werte speichert. Wenn also die DCTDecode-Streams byteweise extrahiert und auf die Festplatte geschrieben werden, erscheinen die resultierenden JPEG-Dateien invertiert.
(Die eigentliche Extraktion wird von einem internen Dienstprogramm durchgeführt, das einfach die Bytes aus dem DCTDecode-Stream extrahiert und sie unverändert in eine Datei mit der Endung schreibt. Es ist im Grunde .jpg
ein binäres Kopieren und Einfügen. Die PDFs stehen zum erneuten Prozess, falls dies erforderlich sein sollte.)
Da die Bilder in ihrem JFIF-Format bleiben müssen, gibt es eine Möglichkeit, eine Markierung in der extrahierten .jpg
Datei zu platzieren, damit Photoshop sie mit der richtigen Codierung öffnet? Der Prozess muss verlustfrei sein (keine weitere Entropiecodierung beinhalten).
Die JPEGs enthalten bereits die APP14
Markierung, und das Entfernen hat keine Auswirkung.
Unten ist ein Zitat aus den libjpeg
Dokumenten:
"... es scheint, dass Adobe Photoshop invertierte Daten in CMYK-JPEG-Dateien schreibt: 0 steht für 100 % Tintendeckung, anstatt 0 % Tinte, wie Sie es erwarten würden. ... Photoshop 3.0 [und neuer] ... schreibt nicht invertiertes YCCK in EPS/JPEG-Dateien ... (Aber die in reinen JPEG-Dateien verwendete Datenpolarität ändert sich nicht ...)"
Hier in den Adobe-Foren ist ein gleiches Problem mit erfolgreichen Ergebnissen: http://forums.adobe.com/message/4271028
Vielleicht ist das APP14-Tag nicht korrekt? APP14-Tags haben mehr zu bieten, als nur da zu sein. Zu JPEG-Tags: http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/JPEG.html#Adobe
Das „Adobe“-APP14-Segment speichert Bildcodierungsinformationen für DCT-Filter. Dieses Segment kann mit dem zusätzlichen „Adobe“-Tag als Block kopiert oder gelöscht werden, aber beachten Sie, dass es standardmäßig nicht gelöscht wird, wenn alle Metadaten gelöscht werden, da es das Erscheinungsbild des Bildes beeinträchtigen kann.
╔════════╦══════════════════╦══════════╦════════════════════════════════════════════╗
║ 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 ║
╚════════╩══════════════════╩══════════╩════════════════════════════════════════════╝
Aber das hilft vielleicht nicht, ich erinnere mich an jemanden, der sagte, dass diese privaten Markierungen nicht dazu gedacht sind, PDF-Reader zu führen, aber richtige Dekodier-Arrays sollten es sein.
Die Magie scheint zu sein
/Decodierung 0 1 0 1 0 1 0 1
was die Farbzuordnung invertieren würde. (Ich denke, das ist ein Flag in libjpeg, etwas Ähnliches sollte in jedem ähnlichen Tool verfügbar sein.) Dekodier-Arrays sind in PDFs üblich, gemäß der PDF-Referenz hier: http://partners.adobe.com/public/developer/en/pdf /PDFReferenz.pdf
Ich habe keine Ahnung, ob Sie diese Dekodier-Arrays in PDF-JPEGs einfügen können oder ob Sie dies zur Stream-Verarbeitung Ihres internen Tools hinzufügen müssen. Ich habe kein Beispiel-PDF, an dem ich arbeiten kann, daher kann ich keine weiteren Nachforschungen anstellen (auch die Referenz ist riesig - tl; dr - aber Sie müssen möglicherweise ...)
/Decode
auf [1 0 1 0 1 0 1 0]
./Decode
Element vorhanden ist, möglicherweise die 0 und 1 austauschen. Ich konnte nicht erraten, was Ihr Anwendungsfall ist, aber wenn Sie ein JPEG aus einem PDF extrahieren , denke ich Das Extraktionstool sollte das wirklich bewältigen ...pdfimages
, um Bilder aus PDF zu extrahieren. In einigen Fällen werden JPG-Dateien invertiert. Ich könnte Bytes in diesen Dateien ändern, weiß aber nicht, wo ich das \Decode
Teil finden kann. Ich verstehe immer noch nicht, ob es sich um einen Parameter für ein Tool oder um einen Datenausschnitt in einem JPG handelt .../Decode
ist (oder besser gesagt, kann sein) im PDF. Sie könnten versuchen, die 0 und 1 in der PDF-Datei zu vertauschen, bevor Sie pdfimages ausführen, wenn das /Decode
Element vorhanden ist. Alternativ können Sie die APP14 aus der extrahierten PDF-Datei hinzufügen (oder entfernen). Wenn Sie das PDF teilen können, kann ich versuchen, einen kurzen Blick für Sie zu werfen.(Haftungsausschluss: Ich habe kein Bild zum Testen - wenn Sie ein solches Bild über eine Filesharing-Site teilen könnten, kann ich es testen und bei Bedarf Anpassungen vornehmen, um zu antworten).
Das Problem hängt höchstwahrscheinlich mit dem fehlenden ICC-Profil zusammen.
Um ein solches Profil einzubetten (oder umzuwandeln), können Sie z.B. ImageMagick, um dies verlustfrei zu machen, ohne die Daten zu beeinträchtigen.
ImageMagick:
http://imagemagick.org/script/index.php
Das Befehlszeilendienstprogramm kann wie folgt verwendet werden, um ein ICC-Profil einzubetten:
convert cmyk.jpg -profile USWebCoatedSWOP.icc cmyk_w_icc.jpg
Konvertieren Sie es optional in den nativen RGB-Farbraum.
Weitere Einzelheiten finden Sie hier:
http://www.imagemagick.org/Usage/formats/#color_profile
Sie können ICC-Profile hier herunterladen:
http://www.adobe.com/support/downloads/detail.jsp?ftpID=4074
Sie können die Farben mit ImageMagick umkehren :
convert input.jpg -negate output.jpg
Das Ergebnis sieht gut aus, ist aber möglicherweise nicht verlustfrei. Zumindest scheint die Dateigröße teilweise deutlich kleiner zu sein.
e100
e100
e100
Horatio
Horatio
Horatio
Ars Magika