2012-09-06 12 views
10

Ich kann nicht finden, ob Ghostscript in der Lage ist, einfach zu erkennen, ob der Job Farbe oder Graustufen ist. Ich verwende Ghostscript für die Konvertierung von Druckaufträgen nach PNG, aber ich brauche auch Informationen über die Farbe des Jobs, damit ich ihn nicht Pixel für Pixel erneut suchen muss.Ghostscript-Farberkennung

Antwort

16

Ein (relativ neues) Ghostscript-Gerät namens inkcov (Sie benötigen Ghostscript v9.05 oder neuer) kann zuverlässig erkennen, ob eine PDF-Seite Farbe verwendet oder nicht.

Es zeigt die Farbdeckung für die CMYK-Tinten separat für jede einzelne Seite an (bei RGB-Farben erfolgt intern eine stille Umwandlung in den CMYK-Farbraum).

gs                  \ 
    -o color-or-grayscale-test.pdf          \ 
    -sDEVICE=pdfwrite             \ 
    -g5950x2105               \ 
    -c "/F1 {10 80 moveto /Helvetica findfont 64 scalefont setfont} def" \ 
    -c "F1       (100% 'pure' black) show showpage" \ 
    -c "F1 .5 .5 .5 setrgbcolor (50% 'rich' rgbgray) show showpage" \ 
    -c "F1 .5 .5 .5 0 setcmykcolor (50% 'rich' cmykgray) show showpage" \ 
    -c "F1 .5   setgray  (50% 'pure' gray)  show showpage" 

Während alle die Seiten für das menschliche Auge erscheinen nicht alle Farben zu nutzen, überhaupt, Seiten:

seine Funktionen zu untersuchen und zu zeigen, zunächst ein Beispiel PDF mit Hilfe von Ghostscript generieren 2 und 3 vermischen ihre scheinbaren Grauwerte tatsächlich mit der Farbe. Aber keine der Farben ist direkt sichtbar (außer Ihr Monitor ist grob falsch eingestellt).

Blick auf die resultierende PDF-Seiten (in PNG-Dateien konvertiert für eine einfachere Anzeige über das Internet):

4 PDF pages without directly visible color

In der Prepress-Industrie, ‚reich‘ Schwarzen oder Grautöne werden häufig verwendet. Das Idiom "reich" schwarz oder grau wird verwendet, um die Tatsache auszudrücken, dass diese Schattierungen nicht aus rein schwarzem Toner oder Tinte bestehen, sondern eingemischte Komponenten der Farbe haben, um sie brillanter und gesättigter erscheinen zu lassen.

Jetzt jede Seite der Farbdeckung überprüfen.

gs -o - -sDEVICE=inkcov color-or-grayscale-test.pdf 
[...] 
Page 1 
    0.00000 0.00000 0.00000 0.05040 CMYK OK 
Page 2 
    0.05401 0.05401 0.05401 0.05401 CMYK OK 
Page 3 
    0.05799 0.05799 0.05799 0.00000 CMYK OK 
Page 4 
    0.00000 0.00000 0.00000 0.04541 CMYK OK 

(Ein Wert von 1,00000 Karten zu 100% Farbdeckung für den jeweiligen Farbkanal So 0.05040 in der ersten Zeile des Ergebnisses bedeutet 5.04 % des Seitenbereiches . wird durch schwarze Tinte) daher das Ergebnis gegeben durch Ghost abgedeckt inkcov ist genau die erwartete man:

  • Seiten 1 + 4 verwenden keine von C (cyan), M (Magenta), Y (gelb) Farben, aber nur K (schwarz).
  • Seiten 2 + 3 verwenden Tinte der Farben C (Cyan), M (Magenta), Y (Gelb), aber überhaupt kein K (Schwarz).

Kommen wir nun alle Seiten des Original-PDF konvertieren die DeviceGray Farbraum zu verwenden:

gs        \ 
    -o only-black-ink.pdf   \ 
    -sDEVICE=pdfwrite    \ 
    -dColorConversionStrategy=/Gray \ 
    -dProcessColorModel=/DeviceGray \ 
    color-or-grayscale-test.pdf 

...und prüfen, ob die Farbdeckung wieder:

gs -q -o - -sDEVICE=inkcov only-black-ink.pdf | grep -v Page 
    0.00000 0.00000 0.00000 0.05040 CMYK OK 
    0.00000 0.00000 0.00000 0.05401 CMYK OK 
    0.00000 0.00000 0.00000 0.05799 CMYK OK 
    0.00000 0.00000 0.00000 0.04541 CMYK OK 

Auch hier genau das erwartete Ergebnis bei erfolgreicher Farbkonvertierung!

+0

Dies ist auch ein schneller Weg, wenn Sie die Tonerdeckung für eine Druckdatei schätzen müssen. –

+0

Falls jemand dies in Ruby machen muss, hier ist ein Edelstein https://rubygems.org/gems/pdf_colored_pages, der ein Array ausgibt, das die Seitennummern (zB 1,3,4) oder einen Bereichsstring wie '1,3 enthält -4 ', durch Ghostscript-InkCV-Ausgabe zu analysieren. – RedRoosterMobile

1

Ein neues Ausgabegerät hat diese Antwort veraltet gemacht, siehe Angenommene Antwort.


Bis 2011 musste die Datei gerastert werden, um eine Ausgabe zu sehen. Da die PDF/PS eine Beschreibung dessen ist, wie die Datei aussieht, wird sie gerastert gerendert. Selbst wenn Sie dies mit ghostscipt tun könnten, bin ich mir sicher, dass es zuerst die Datei rastern/interpretieren müsste, dann schauen Sie sich die Ausgabe an. Wenn Sie also die PNGs haben, können Sie dies auch selbst tun, was weniger CPU-intensiv ist Datei erneut mit GS.

+0

... und ich bin mir ziemlich sicher, dass Ihre Aussage * "Sie können das nicht tun" * war bis vor etwa einem Jahr korrekt, aber es ist nicht mehr :-) - Also bitte löschen (oder bearbeiten) Ihre Antwort, bevor es nach unten geht ... :-) –