Discussion:
Ghostscript nach PDF nach JPG
(zu alt für eine Antwort)
Thomas Steinbach
2010-04-01 00:53:42 UTC
Permalink
Hallo,

ich konvertiere mit gs eine Postscript Datei nach PDF, was super
funktioniert.
Nun moechte ich noch diese Postscript-Datei nach jpeg konvertieren. Mit:

gs -dSAFER -sDEVICE=jpeg -r96 -sOutputFile=new.jpg -c save pop -f myfile.ps

bekomme ich nun auch eine PS Datei prima in ein jpeg "konvertiert".
Gibt es aber bei GS eine Moeglichkeit hier noch direkt ein Qualitaetsstufe
fuer das jpeg file anzugeben? Also z.B. 80%?
Eben um das resultierende jpeg file noch ein wenig kleiner zu bekommen?

Thomas

Ja, mir ist schon klar, PS nach JPEG hat nicht wirklich was mit pdf zu tun,
aber hier sind sicherlich am ehesten Ghostscript Neerds zu finden. Danke
fuer das Verstaendnis.
Thomas Kaiser
2010-04-01 06:28:21 UTC
Permalink
Post by Thomas Steinbach
ich konvertiere mit gs eine Postscript Datei nach PDF, was super
funktioniert.
gs -dSAFER -sDEVICE=jpeg -r96 -sOutputFile=new.jpg -c save pop -f myfile.ps
bekomme ich nun auch eine PS Datei prima in ein jpeg "konvertiert".
So unterscheiden sich also die Geschmäcker. Ich fand die Ergebnisse
immer nur furchtbar, wenn man direkt das "jpeg"-Device nutzte. (siehe
Post by Thomas Steinbach
Gibt es aber bei GS eine Moeglichkeit hier noch direkt ein Qualitaetsstufe
fuer das jpeg file anzugeben? Also z.B. 80%?
Eben um das resultierende jpeg file noch ein wenig kleiner zu bekommen?
Weiß ich angesichts der fürchterlichen Ergebnisse, die das immer
lieferte, nicht (nie den Bedarf verspürt, da weiter nachzuforschen).

Ich würde ja gs mit dreifacher Auflösung eine Bytemap rendern lassen
(idealerweise mittels tiff32nc-Device) und die dann mittels bspw.
GraphicsMagick auf die eigentliche Bildauflösung runterrechnen lassen.
Dabei hast Du volle Kontrolle über Kompressionsparameter des
entstehenden JPEG und bekommst zusätzlich noch Anti-Aliasing...

Gruss,

Thomas
Thomas Steinbach
2010-04-29 17:32:41 UTC
Permalink
Hallo Thomas,
[...]
So unterscheiden sich also die Geschmäcker. Ich fand die Ergebnisse
immer nur furchtbar, wenn man direkt das "jpeg"-Device nutzte. (siehe
Naja, die ganzen Tools lassen ja auch extrem viele Moeglichkeiten zu.
Dass muss ja nicht immer das gleiche "fuerchterliche" Ergebnis sein.
Jenachdem welche Quelle und welcher Art PS Datei ich habe, etc.
WeiÃY ich angesichts der fürchterlichen Ergebnisse, die das immer
lieferte, nicht (nie den Bedarf verspürt, da weiter nachzuforschen).
Ich würde ja gs mit dreifacher Auflösung eine Bytemap rendern lassen
(idealerweise mittels tiff32nc-Device) und die dann mittels bspw.
GraphicsMagick auf die eigentliche Bildauflösung runterrechnen lassen.
Dabei hast Du volle Kontrolle über Kompressionsparameter des
entstehenden JPEG und bekommst zusätzlich noch Anti-Aliasing...
Ich habe das gestern mal getestet. Da kamen beim tiff stolze 270 MB
zusammen ;-) Befehlszeile:

gswin32c.exe -dSAFER -dBATCH -dNOPAUSE -sDEVICE=tiff32nc
-sOutputFile="mydoc.tiff" -c save pop -f "mydoc.ps"

Wenn man es nur temporaer anlegt ist das ja ok.
Aber was meinst du mit dreifacher Aufloesung? Die DPI?
Mit dem Kommando oben bekomme ich 600dpi.

Und weisst du adhoc wie man bei gm convert die Resolution (z.B. 96dpi)
angibt? Bisher habe ich:

gm.exe convert -resize 50% "mydoc.jpg" "mydoc.jpg"

(btw: Zumindest geht es bei convert die Datei gleich wieder zu
ueberschreiben)
Aber dann habe ich dennoch 600dpi und ich finde keinen Schalter fuer die
dpi.

Siehe: http://www.graphicsmagick.org/convert.html
oder bin ich da zu blind?


Thomas
Thomas Proppe
2010-04-29 18:24:29 UTC
Permalink
Post by Thomas Steinbach
gswin32c.exe -dSAFER -dBATCH -dNOPAUSE -sDEVICE=tiff32nc
-sOutputFile="mydoc.tiff" -c save pop -f "mydoc.ps"
Wenn man es nur temporaer anlegt ist das ja ok.
Aber was meinst du mit dreifacher Aufloesung? Die DPI?
Mit dem Kommando oben bekomme ich 600dpi.
gm.exe convert -resize 50% "mydoc.jpg" "mydoc.jpg"
Warum nicht gleich bei Ghostscript: -r300 (beipielhaft für 300dpi) als
Parameter geht pfleglich mit Deiner Zeit und Speicher um. Du kannst auch
abweichende Parameter -r200x400 angeben falls das für das entsprechende
Ausgabegerät förderlich ist. Siehe Pkt. '3.1 Output resolution' in
'use.htm' im doc-Verzeichnis.

Thomas
Thomas Steinbach
2010-04-30 16:48:44 UTC
Permalink
Hallo Thomas,
Post by Thomas Proppe
Post by Thomas Steinbach
gm.exe convert -resize 50% "mydoc.jpg" "mydoc.jpg"
Warum nicht gleich bei Ghostscript: -r300 (beipielhaft für 300dpi) als
Parameter geht pfleglich mit Deiner Zeit und Speicher um. Du kannst auch
abweichende Parameter -r200x400 angeben falls das für das entsprechende
Ausgabegerät förderlich ist. Siehe Pkt. '3.1 Output resolution' in
'use.htm' im doc-Verzeichnis.
Thomas K. meinte diese Ergebnisse ihm besser gefallen wuerden und
so wollte ich mal schauen wie es mit herunterrechnen ausschaut.
Momentan mache es jetzt mit gs -r600 nach jpeg (aber nicht tiff) und
dann mit gm (-antialias) heruntergerechnet. Bei convert/mogrify geht
das dann z.B. mit "-resample -r96x96". An alle die diesen Thread hie
finden: Achtung mogrify _ueberschreibt_ Eingabedatei, convert nicht.

Thomas
Thomas Kaiser
2010-05-04 09:40:18 UTC
Permalink
Post by Thomas Steinbach
Aber was meinst du mit dreifacher Aufloesung? Die DPI?
Ja, die ppi (Pixel per Inch) bzw. eigentlich die Pixel-Ausmaße. Wenn ich
ein A4-PDF rendern will, so daß es ein Bildchen mit 595x842 Pixel wird,
dann lasse ich es mir von GS bspw. mit 1785x2526 rendern und anschl.
downsamplen.
Post by Thomas Steinbach
Mit dem Kommando oben bekomme ich 600dpi.
Und weisst du adhoc wie man bei gm convert die Resolution (z.B. 96dpi)
gm.exe convert -resize 50% "mydoc.jpg" "mydoc.jpg"
(btw: Zumindest geht es bei convert die Datei gleich wieder zu
ueberschreiben)
Aber dann habe ich dennoch 600dpi und ich finde keinen Schalter fuer die
dpi.
Hab grad nachgeschaut, ich hab hier in einem Konvertierskriptchen, das
unter Unix mit ImageMagick laufen muß, Folgendes stehen:

gs -q -dNOPAUSE -dBATCH -r${RenderResolution} -sDEVICE=bmp16m -sOutputFile="${MyTempImage}" -dEPSCrop "${MyHires}"
convert -quality 70 -unsharp 0.6x0.6+2+0.5 bmp:"${MyTempImage}" -resize 50% -density 72x72 -units pixelsperinch +profile '*' -interlace line "jpg:${TargetFile}"

(IIRC deshalb BMP, weil damit auch Freistellpfade richtig visualisiert
werden. Die Ausgangsbilddaten liegen hier als Photoshop-EPS in ECI-RGB
vor, d.h. es braucht kein tiff32nc und keine Text-/Vektor-Interpolation,
weil es sich um reine Bilddaten handelt, die da in den EPS stecken)
Post by Thomas Steinbach
Siehe: http://www.graphicsmagick.org/convert.html
oder bin ich da zu blind?
Das mit den ppi sind letztlich ja nur Metadaten, die am Bild kleben (und
die bei JPEG als Zielformat letztlich auch völlig wurscht sind,
zumindest als Metadaten, die am Ergebnis kleben). Wenn ich von
dreifacher oder doppelter Auflösung spreche/schreibe, dann meine ich
eigentlich Pixel-Ausmaße, die halt beim Rendering entsprechend höher
ausfallen und beim Downsampling dann reduziert werden (für einen
Photoshop-Operator ist sowas quasi ein intuitiver Weg, ein Bild
herunterzurechnen bzw. zu skalieren).

Es gibt allerdings genügend Tools, die das völlig unabhängig voneinander
sehen und bei ppi-Anpassungen tatsächlich nur Metadaten ändern (oder
einfach $irgendwas machen, wenn man resize-Parameter in Prozent und eine
Zielauflösung angibt. Image- und GraphicsMagick sind da IMO "gute"
Beispiele. Dort stellt man ja oft genug fest, daß nach Updates auch um
nur winzige Versionssprünge auf einmal diese ganze Auflösungs-/
Größenanpassungs-Chose komplett anders parametrisiert werden will, und
irgendwelche Skripte nach Einspielen einer neuen IM-/GM-Version auf
einmal riesige oder winzigkleine Bilder im Vergleich zu vor dem Update
liefern...)

Gruss,

Thomas

Thomas Proppe
2010-04-01 06:41:52 UTC
Permalink
Post by Thomas Steinbach
bekomme ich nun auch eine PS Datei prima in ein jpeg "konvertiert".
Gibt es aber bei GS eine Moeglichkeit hier noch direkt ein Qualitaetsstufe
fuer das jpeg file anzugeben? Also z.B. 80%?
Eben um das resultierende jpeg file noch ein wenig kleiner zu bekommen?
Bei Bedarf "-dJPEGQ=80" in die Batch-Datei einbauen. Gf. auch noch mal
mit den Parameteren

-dTextAlphaBits=2
-dGraphicsAlphaBits=2 (Werte jeweils bis 4 glaube ich)

experimentieren.


Thomas
Thomas Kaiser
2010-04-01 07:09:27 UTC
Permalink
Gf. auch noch mal mit den Parameteren
-dTextAlphaBits=2
-dGraphicsAlphaBits=2 (Werte jeweils bis 4 glaube ich)
experimentieren.
Würde ich gleich auf 4 setzen und -dDOINTERPOLATE ebenfalls nutzen (was
leider kaputt ist, wenn Rotation ins Spiel kommt [1]). Bzw. das
Antialiasing gleich in einem nachgelagerten Schritt stattfinden lassen
(war bei mir auch immer performanter). Und das bringt alles nix, wenn
Farbe im PS war, weil das Ergebnis nicht wirklich gefallen dürfte :-)

Gruss,

Thomas

[1] <http://bugs.ghostscript.com/show_bug.cgi?id=690246#c0>
Thomas Steinbach
2010-04-29 17:09:39 UTC
Permalink
Hallo Thomas
Post by Thomas Kaiser
Post by Thomas Proppe
-dTextAlphaBits=2
-dGraphicsAlphaBits=2 (Werte jeweils bis 4 glaube ich)
experimentieren.
Würde ich gleich auf 4 setzen und -dDOINTERPOLATE ebenfalls nutzen (was
leider kaputt ist, wenn Rotation ins Spiel kommt [1]). Bzw. das
Aber wohl nur bei Version 8.63 oder gilt das auch fuer die aktuelle Version?
Post by Thomas Kaiser
Antialiasing gleich in einem nachgelagerten Schritt stattfinden lassen
(war bei mir auch immer performanter). Und das bringt alles nix, wenn
Farbe im PS war, weil das Ergebnis nicht wirklich gefallen dürfte :-)
Das Antialiasing bringt bei Farbe nichts, oder wie?

Ich experimentiere noch, bin aber etwas erschlagen von der
Fuelle aller Optionen und Schalter ;-)

Thomas
Thomas Proppe
2010-04-29 18:39:51 UTC
Permalink
Post by Thomas Steinbach
Hallo Thomas
Post by Thomas Proppe
-dTextAlphaBits=2
-dGraphicsAlphaBits=2 (Werte jeweils bis 4 glaube ich)
experimentieren.
Würde ich gleich auf 4 setzen und -dDOINTERPOLATE ebenfalls nutzen (was
leider kaputt ist, wenn Rotation ins Spiel kommt [1]). Bzw. das
Aber wohl nur bei Version 8.63 oder gilt das auch fuer die aktuelle Version?
Versuch macht klug :-)
Post by Thomas Steinbach
Antialiasing gleich in einem nachgelagerten Schritt stattfinden lassen
(war bei mir auch immer performanter). Und das bringt alles nix, wenn
Farbe im PS war, weil das Ergebnis nicht wirklich gefallen dürfte :-)
Das Antialiasing bringt bei Farbe nichts, oder wie?
Auch hier gilt obiges, speziell der Hinweis in "10.2 Parameter switches"
in 'use.htm':

"Note that because of the way antialiasing blends the edges of shapes
into the background when they are drawn some files that rely on joining
separate filled polygons together to cover an area may not render as
expected with GraphicsAlphaBits at 2 or 4. If you encounter strange
lines within solid areas, try rendering that file again with
-dGraphicsAlphaBits=1."

Speziell letzteres dürfte die Linien in gefüllten Flächen (bei uns aus
AutoCAD) minimieren oder vermeiden helfen.

Thomas
Thomas Kaiser
2010-05-04 09:16:17 UTC
Permalink
Post by Thomas Steinbach
Das Antialiasing bringt bei Farbe nichts, oder wie?
Nein, es geht um's Ziel-Device. Wenn Du direkt RGB-JPEG erzeugen willst,
waren die Ergebnisse immer recht erbärmlich. Ich empfand den Umweg über
das tiff32nc-Device in Ordnung und dann Farbraumkonvertierung in den
passenden RGB-Zielfarbraum (allerdings in meinem Umfeld auch immer PDF
aus der Druckvorstufe am Start, d.h. ggf. einfach "sehr speziell")
Post by Thomas Steinbach
Ich experimentiere noch, bin aber etwas erschlagen von der Fuelle
aller Optionen und Schalter ;-)
Ich hab vor paar Wochen quasi aus Versehen einen Testparcours
verschiedener PDF-Renderer aufgebaut. GhostScript (aktuellste Version
aus dem SVN, weil [1]) wurde so aufgerufen:

-dBATCH -dNOPAUSE -r$3 -sDEVICE=tiff32nc -dDOINTERPOLATE -dTextAlphaBits=2 -dGraphicsAlphaBits=2

Die Auflösung war dabei das Doppelte der Zielauflösung, denn in einem
nachgelagerten Schritt wurde noch runterskaliert

sips -z ${NewHeight} ${NewWidth} --setProperty dpiHeight $2 \
--setProperty dpiWidth $2 --setProperty formatOptions lzw \
"${MyFinalTIFF}" --deleteColorManagementProperties \
--deleteProperty profile --out "${MyTempTIFF}" >/dev/null 2>&1

Das ergab in meinen Tests bzw. auf Basis meines Testmaterials
(umfangreiche Akzidenzen, vulgo Anzeigen) die ideale Relation zwischen
Bildqualität und Performance. Downsampling per sips [2], weil das die
schnellste Variante ist. Abseits MacOS X empfiehlt sich wohl am ehesten
GraphicsMagick für den Zweck.

(Ach ja, es wurde davor noch 'ne DeviceLink-Konvertierung
dazwischengeschoben [3])

Thomas

[1] <http://bugs.ghostscript.com/show_bug.cgi?id=691228>

[2] <http://developer.apple.com/Mac/library/documentation/Darwin/Reference/ManPages/man1/sips.1.html>

[3] DeviceLink-Konvertierung in der Shell mit Umweg über AppleEvents
(alles MacOS X Kram, daher wohl ohne konkrete Bedeutung für Dich.
Ich kipp das eher mal "einfach so" nach groups.google.com :-)

osascript <<-End-of-Script
with timeout of 600 seconds
set MyTIFF to alias (POSIX file "${MyFinalTIFF}")
set DLProfile to POSIX file "/Users/tk/.../DL_ISOnews26v4%20TIA%20230.icc"
tell application "ColorSyncScripting"
match link MyTIFF through link DLProfile matching with saturation intent using quality best
end tell
end timeout
End-of-Script
Thomas Steinbach
2010-04-29 17:35:38 UTC
Permalink
Hallo Thomas,
Post by Thomas Steinbach
Gibt es aber bei GS eine Moeglichkeit hier noch direkt ein
Qualitaetsstufe
fuer das jpeg file anzugeben? Also z.B. 80%?
Bei Bedarf "-dJPEGQ=80" in die Batch-Datei einbauen. Gf. auch noch mal mit
den Parameteren
Danke fuer den Tip. Funktioniert.
Aber erstaunlicherweise ist mein resultierendes jpg-File bei einem Wert
von 80 um ein Drittel groesser, als wenn ich keine Qualitaetsstufe angebe.
Scheinbar ist der default Wert relativ niedrig. Z.B. bei 60 odr so. Ich
haette
jetzt erstmal vermutet das ohne Angabe versucht wird die hoechstmoegliche
Qualitaetsstufe zu erreichen.
-dTextAlphaBits=2
-dGraphicsAlphaBits=2 (Werte jeweils bis 4 glaube ich)
experimentieren.
Danke fuer die Tips. Bin am experimentieren.
Sehe ich das richtig das das -dText* eben _nur_ bei Text PS
und das -dGraphics* _nur_ bei PS mit (Vektor-) Grafiken
zum Tragen kommt?

Thomas
Thomas Proppe
2010-04-29 18:39:56 UTC
Permalink
Post by Thomas Steinbach
Hallo Thomas,
Post by Thomas Steinbach
Gibt es aber bei GS eine Moeglichkeit hier noch direkt ein
Qualitaetsstufe
fuer das jpeg file anzugeben? Also z.B. 80%?
Bei Bedarf "-dJPEGQ=80" in die Batch-Datei einbauen. Gf. auch noch mal mit
den Parameteren
Danke fuer den Tip. Funktioniert.
Aber erstaunlicherweise ist mein resultierendes jpg-File bei einem Wert
von 80 um ein Drittel groesser, als wenn ich keine Qualitaetsstufe angebe.
Scheinbar ist der default Wert relativ niedrig. Z.B. bei 60 odr so. Ich
haette
jetzt erstmal vermutet das ohne Angabe versucht wird die hoechstmoegliche
Qualitaetsstufe zu erreichen.
"dJPEGQ=N (integer from 0 to 100, default 75)" <- jedenfalls ist bei
8.60 der Standardwert 75. Größensteigerung kann also sein.

In der 'devices.htm' unter Pkt. 3.2 'JPEG file format (JFIF)' steht
jedenfalls der Hinweis, dass sich das vielleicht in späteren Versionen
ändert. ich sollte mir mal die aktuelle Version gönnen.
Post by Thomas Steinbach
-dTextAlphaBits=2
-dGraphicsAlphaBits=2 (Werte jeweils bis 4 glaube ich)
experimentieren.
Danke fuer die Tips. Bin am experimentieren.
Sehe ich das richtig das das -dText* eben _nur_ bei Text PS
und das -dGraphics* _nur_ bei PS mit (Vektor-) Grafiken
zum Tragen kommt?
siehe "10.2 Parameter switches" in 'use.htm' im doc-Verzeichnis, da
gibts auch noch Hinweise zu den Parametern.

Thomas
Thomas Steinbach
2010-04-30 16:43:01 UTC
Permalink
Hallo Thomas
Post by Thomas Proppe
Post by Thomas Steinbach
Sehe ich das richtig das das -dText* eben _nur_ bei Text PS
und das -dGraphics* _nur_ bei PS mit (Vektor-) Grafiken
zum Tragen kommt?
siehe "10.2 Parameter switches" in 'use.htm' im doc-Verzeichnis, da
gibts auch noch Hinweise zu den Parametern.
Ja, da steht es ja. Soweit funkt es momentan auch recht gut.
Ich frage mich hier aber gerade wie Text und Graphic in einer
Postscript Quelle unterschieden wird.

Thomas
Thomas Proppe
2010-05-03 07:14:54 UTC
Permalink
Post by Thomas Steinbach
Ja, da steht es ja. Soweit funkt es momentan auch recht gut.
Ich frage mich hier aber gerade wie Text und Graphic in einer
Postscript Quelle unterschieden wird.
Thomas
Bin kein 'interner' Kenner des Codes, aber es steht doch in der Datei

<<
/Type /Font
/Subtype /TrueType
usw.

im Gegensatz zu '<</Subtype/Image/' beispielsweise

wenn also Text als Grafik eingefügt ist, d.h. wenn die Schrift als
Grafik eingebettet ist, dann ist greift halt nur 'GraphicsAlpha'.

Thomas
Thomas Kaiser
2010-05-04 09:23:25 UTC
Permalink
Post by Thomas Steinbach
Ich frage mich hier aber gerade wie Text und Graphic in einer
Postscript Quelle unterschieden wird.
Das sind einfach zwei verschiedene Elementtypen innerhalb eines
PostScript-Streams oder einer PDF-Datei, die -- beim Rendering -- auch
unterschiedliche Behandlung verdienen (bspw. gibt es das Phänomen des
Hinting [1], das bei reinem Text die Rendering-Qualität auf niedrig
aufgelösten "Geräten" zu verbessern hilft. Wenn Textelemente allerdings
durch vorherige Umwandlung in Pfade nicht mehr als Text sondern nur noch
als Ansammlung von vektorisierten Elementen vorliegen, dann greift sowas
nicht mehr)

Insofern kann es sinnvoll sein, bzgl. Anti-Aliasing unterschiedliche
Settings für Text und vektorisierte Grafiken vornehmen zu können (in der
Praxis aber wohl nur bei manuellem Feintuning und individueller
Betrachtung des Ausgangs-Materials bzw. des Ergebnisses. Hat man Batch-
Konvertierung im Sinn und ist das Ausgangsmaterial nicht immer vom
gleichen Typ, dann kann man wohl nur auf sinnvolle Defaults setzen...
und Text und Vektor-Elemente gleich behandeln)

Gruss,

Thomas

[1] <http://en.wikipedia.org/wiki/Font_hinting>
Lesen Sie weiter auf narkive:
Loading...