pdf zu jpg ohne Qualitätsverlust; gscan2pdf

51

Wenn ich eine pdf-Datei mit in eine Menge jpg-Dateien konvertiere

convert -quality 100 file.pdf page_%04d.jpg

Ich habe einen merklichen Qualitätsverlust.

Wenn ich jedoch Folgendes tue, tritt kein (merklicher) Qualitätsverlust auf:

Starten Sie gscan2pdf, wählen Sie file-> import (und wählen Sie file.pdf). Wechseln Sie dann in das temporäre Verzeichnis von gscan2pdf. Es gibt viele PNM-Dateien (eine für jede Seite der PDF-Datei). Jetzt mache ich

  for file in *.pnm; do            
  convert $file $file.jpg done

Die resultierenden JPG-Dateien haben (ungefähr) die gleiche Qualität wie das Original-PDF (was ich will).

Nun ist meine Frage, ob es eine einfache Befehlszeile gibt, mit der die PDF-Datei in eine Reihe von JPG-Dateien konvertiert werden kann, ohne dass ein Qualitätsverlust auftritt. (Die obige Lösung ist zu kompliziert und zeitaufwändig).

Student
quelle
Bei Ihren Fragen ist nicht klar, ob Sie in Ihrem PDF über Text und Vektorgrafiken sprechen oder ob Sie eingebettete Bilder extrahieren möchten.
Asoundmove

Antworten:

92

Es ist nicht klar, was Sie unter "Qualitätsverlust" verstehen. Das könnte viele verschiedene Dinge bedeuten. Könnten Sie ein paar Beispiele zur Veranschaulichung posten? Vielleicht schneiden Sie den gleichen Abschnitt aus den Versionen mit schlechter Qualität und guter Qualität (als PNG, um weitere Qualitätsverluste zu vermeiden).

Möglicherweise müssen Sie verwenden -density, um die Konvertierung mit einer höheren Auflösung durchzuführen:

convert -density 300 file.pdf page_%04d.jpg

(Sie können voranstellen -units PixelsPerInchoder -units PixelsPerCentimeterbei Bedarf. Meine Kopie ist standardmäßig ppi.)

Update: Wie Sie bereits betont haben, ist gscan2pdf(wie Sie es verwenden) nur ein Wrapper für pdfimages(von Poppler ). pdfimagestut nicht das Gleiche convertwie bei einer PDF-Eingabe.

convert Nimmt die PDF-Datei, rendert sie mit einer bestimmten Auflösung und verwendet die resultierende Bitmap als Quellbild.

pdfimagesDurchsucht die PDF-Datei nach eingebetteten Bitmap-Bildern und exportiert sie in eine Datei. Text- oder Vektorzeichnungsbefehle in der PDF-Datei werden einfach ignoriert.

Wenn Sie also eine PDF-Datei haben, die nur eine Reihe von Bitmaps umschließt, pdfimageskönnen Sie sie viel besser extrahieren, da Sie die Rohdaten in ihrer ursprünglichen Größe erhalten. Wahrscheinlich möchten Sie diese -jOption auch verwenden pdfimages, da eine PDF-Datei unformatierte JPEG-Daten enthalten kann. Standardmäßig pdfimageswird alles in das PNM-Format konvertiert, und das Konvertieren von JPEG> PPM> JPEG ist ein verlustreicher Prozess.

Also versuche

pdfimages -j file.pdf page

Möglicherweise müssen Sie dem ein convertbis- .jpgZeichen hinzufügen (je nachdem, welches Bitmap-Format die PDF-Datei verwendet hat).

Ich habe diesen Befehl an einem PDF ausprobiert, das ich selbst aus einer Folge von JPEG-Bildern erstellt habe. Die extrahierten JPEGs waren Byte für Byte identisch mit den Quellbildern. Höhere Qualität kann man nicht erreichen.

cjm
quelle
+1 Ich bin so froh, dass ich mich nicht dem Snobismus unterworfen habe, als ich einen deiner in mir inspirierten Sätze falsch gelesen und tatsächlich PDF-Bilder ausprobiert habe - wahrscheinlich das nützlichste Programm, das ich seit Monaten verwendet habe! Ich würde jeden ermutigen, es zu versuchen!
ixtmixilix
@ixtmixilix, ich bin neugierig. Was hast du falsch gelesen und wie?
cjm
Ziemlich cool! Löste meinen Tag. Danke!
Geppettvs D'Constanzo
convertist auch für große PDFs unpraktisch. Beispielsweise waren 45 GB Speicher erforderlich, um ein Buch mit 700 Seiten mit 6 Megapixeln zu verarbeiten. Es dauerte auch ungefähr tausendmal länger als pdfimages.
Camille Goudeseune
Umgekehrt können Sie Bilder in ein PDF konvertieren oder besser Bilder in ein PDF verpacken. Verwenden Sie dazu img2pdf, hier: gitlab.mister-muffin.de/josch/img2pdf ( umschließt jpg und jpg2000 in ein PDF).
Erik
4

Wie die Antwort des Schülers sagt, pdfimagesist dies eine gute Option. Aus meiner Erfahrung beides gsund convertzu schlechter Qualität exportieren, egal ob du die richtige dpi angibst.

Wenn die PDF-Datei jedoch mehrere Ebenen pro Seite pdfimagesenthält, funktioniert dies nicht und die Ebenen werden als separates Bild extrahiert. In diesem Fall ist es am besten inskcape, die Seite so zu exportieren, wie sie angezeigt wird.

Dies sind die Befehle, die ich benutze:

pdftk combined_to_do.pdf burst output pg_%04d.pdf
ls ./pg*.pdf | xargs -L1 -I {}  inkscape {} -z --export-dpi=300 --export-area-drawing --export-png={}.png

Der erste Befehl teilt alle Seiten auf. Der zweite Befehl konvertiert Seite für Seite in PNG. Sie können sie png behalten oder einfach in jpeg konvertieren

ls ./p*.png | xargs -L1 -I {} convert {}  -quality 100 -density 300 {}.jpg

Im Vergleich zu pdfimages, gsund ImageMagick ist der Export convertmeiner Meinung nach von inkscapebester Qualität.

Eduard Florinescu
quelle
3

Die Antwort von @cjm ist korrekt, aber wenn Sie GUI mögen und nicht alle PDF-Seiten rendern möchten, verwenden Sie gimp, um ein Bild zu erhalten.

Öffnen Sie ein PDF mit gimp und Sie erhalten ein Importfenster mit allen gerenderten Seiten. Wählen Sie die gewünschten Seiten aus und stellen Sie die Auflösung auf 600 Pixel / Zoll ein (ich habe festgestellt, dass 300 in vielen Fällen zu scharf sind). Speichern im gewünschten Format mit "Datei / Export"

Auf jeden Fall muss ein Flag vorhanden sein, mit dem die gewünschten Seiten über die Befehlszeile ausgewählt werden können.

albfan
quelle
2

Beim Betrachten des Quellcodes von gscan2pdf ist mir aufgefallen, dass PDF-Bilder verwendet werden. So pdfimages file.pdf pagewürde in page-001.ppm, page-002.ppmusw.

Student
quelle
pdfimages macht wirklich den Job
Eduard Florinescu
2

In Ihrer Frage ist nicht klar, ob Sie in Ihrem PDF über Text und Vektorgrafiken sprechen oder ob Ihr PDF eingebettete Bilder enthält.

Nachdem ich gelesen habe, worum es bei gscan2pdf geht, gehe ich davon aus, dass Ihre PDF-Dateien (nur) eingebettete Grafiken enthalten.

convertIm Wesentlichen "druckt" Ihr PDF ohne Rücksicht auf den Inhalt. Wie @cjm vorschlägt, möchten Sie möglicherweise die Druckdichte ändern. Nur so kann die Qualität von Vektorgrafiken gesteigert werden.

Wenn Sie stattdessen eingebettete Bilder extrahieren möchten (ähnlich wie es gscan2pdf zu tun scheint), führt die Schätzung der Dichte in der Regel entweder zu Qualitätsverlusten oder zu einer höheren Qualität als erforderlich (und zur Verschwendung von Speicherplatz). Die Antwort ist dann, das Bild zu extrahieren, anstatt das PDF zu drucken. Lesen Sie diesen Artikel, in dem grundsätzlich die Verwendung von pdfimagesempfohlen wird, um Bilder ohne Qualitätsverlust zu extrahieren.

asoundmove
quelle