Wie kann ich eine PNG-Datei in hoher Qualität in eine PDF-Datei konvertieren, damit sie nicht verschwommen oder verschwommen ist?

54

Es gibt eine Menge Fragen darüber, wie man eine PDF-Datei in ein PNG-Bild konvertiert, aber ich möchte eine schöne, scharfe PNG-Datei nehmen und sie einfach umschließen oder in eine PDF-Datei einbetten, ohne dass sie unscharf oder unscharf aussieht verschwommen.

Mir ist klar, dass ich mit imagemagic eine einfache Konvertierung durchführen kann:

convert sample.png sample.pdf

Ich habe auch viele Schalter ausprobiert, um die Tiefe und auch die Qualität einzustellen:

convert -quality 100 sample.png sample.pdf

Die PDF-Datei erscheint jedoch immer noch verschwommen / verschwommen.

Hier ist ein Beispielbild:

http://img406.imageshack.us/img406/6461/picture3mu.png

Als Png ist es frisch und sauber. Wenn ich es in ein PDF konvertiere, sieht es auch bei gleicher Größe verschwommen aus:

Picture 4.png http://img803.imageshack.us/img803/9969/picture4at.png

Wie kann ich PNG in ein PDF in hoher Qualität konvertieren?

cwd
quelle
Ich hoffe, Sie finden eine gute Antwort auf Ihre Frage, aber ich denke, es ist nur eine bestimmte Eigenschaft von PDF, Bilder im JPG-Format zu speichern. PNG hat, wie Sie uns zeigen, eine viel bessere Qualität als JPG.
jippie
1
@cwd: Haben Sie versucht, es in eine .tex-Datei zu kopieren und dann die PDF-Datei zu erstellen? Mit \usepackage[pdftex, final]{graphicx}und \includegraphics[width=516px]{calendar.png}zum Beispiel.
Emanuel Berg
2
@jippie: Nein, PDF kann Bitmaps verlustfrei speichern . Der Link enthält eine Liste von Komprimierungsalgorithmen anstelle von Formaten, da die Bitmap-Daten in einer PDF-Datei nicht extrahiert und direkt als JPEG oder TIFF angezeigt werden können ), JPEG 2000 (auch verlustbehaftet) oder eine von mehreren TIFF-Varianten (verlustfrei). Es ist jedoch richtig, dass ein bestimmter PDF-Distiller standardmäßig Bitmaps in DCT-Form (auch als JPEG bezeichnet) übersetzt und stattdessen angewiesen werden muss, eine verlustfreie Form zu verwenden.
Warren Young
@cwd Hast du darüber nachgedacht, eine Antwort zu akzeptieren? Ich denke , die Antwort von user32208 ist ziemlich gut. Unix.stackexchange.com/a/64495/16920
Léo Léopold Hertz 준영

Antworten:

34

Versuchen Sie es mit der -densityOption. Die Standardauflösung beträgt 72 Punkte pro Zoll. Also probier mal sowas -density 300.

Informationen hierzu finden Sie -densityin der Dokumentation zu den ImageMagick-Befehlszeilenoptionen.

user32208
quelle
Dichte scheint definitiv der Schlüssel zu sein. Skalierung und Dichte scheinen in umgekehrter Beziehung zueinander zu stehen. Daher habe ich mit beiden Einstellungen gespielt, um ein optimales Ergebnis in Bezug auf das Erscheinungsbild und die Dateigröße zu erzielen. Wenn es eine festgelegte Formel gibt, würde ich es gerne wissen.
Brian Z
Wie finde ich die beste Dichte-Option? Wie viel Daten gehen with density 300bei einem Beispielbild verloren? Ich denke, das Ergebnis hängt von der Eingabe ab. Ein neuer Thread dazu hier unix.stackexchange.com/q/292025/16920
Léo Léopold Hertz 준영
Das ändert nichts an der Qualität für mich.
Guillaume Chevalier
19

Es kann sehr kompliziert sein, eine gute PDF-Ausgabe zu erhalten convert. Versuchen Sie es img2pdfstattdessen. Aus der Readme:

Verlustfreie Konvertierung von Bildern in PDF ohne unnötige Neucodierung von JPEG- und JPEG2000-Dateien. Somit kein Qualitätsverlust und keine unnötig große Ausgabedatei.

Zur Verdeutlichung: PDF kann verlustfreie JPEG 2000-Bilder einbetten (und die meisten Leser scheinen diese zu unterstützen ). Diese Konvertierung ist also völlig verlustfrei:

convert sample.png -quality 0 sample.jp2
img2pdf -o sample.pdf sample.jp2

(Vorausgesetzt, der JP2-Delegierte ist verfügbar: check identify -list format | grep JP2.)

Brian Z
quelle
4
Dies ist meiner Meinung nach die beste Antwort hier, aber Sie sollten Ihren Punkt besser erklären, dh, dass PDF verlustfreie JPEG 2000-Bilder einbetten kann. So ist der vollständige Befehl für die OP würde wie etwas sein: convert sample.png -quality 0 sample.jp2; img2pdf -o sample.pdf sample.jp2. (Vorausgesetzt, der JP2-Delegierte ist verfügbar: check identify -list format | grep JP2.)
Nemo
1
Wenn Sie sich an Standard-Repositorys auf Ubuntu 14 halten möchten, converttiff und dann tiff2pdf.
Camille Goudeseune
Dies ist eine großartige Antwort. Vielen Dank.
Lyubomyr Shaydariv
@ brian-z Kannst du in deiner Antwort bitte das Argument erklären -quality 0?
SebMa
SebMa, @Nemo hat diesen Befehl hinzugefügt, aber ich denke, es sollte vielleicht -quality 100stattdessen sein?
Brian Z
14

Ich bin fast sicher , dass das, was Sie als Qualitätsverlust in der PDF wahrnehmen, ist nur ein Effekt Ihres PDF - Viewer ‚s Anti - Aliasing - Funktion.

Wenn Sie evincezum Anzeigen der PDF-Datei verwenden, wird die Antialiasing-Funktion bei einem bestimmten Zoom automatisch deaktiviert (300% in meinem Schnelltest). Sie können dies deutlich sehen, wenn Sie weiter hineinzoomen - Sie werden feststellen, dass Pixel plötzlich deutlich sichtbar werden. Dies ist der Punkt, an dem das Anti-Aliasing ausgeschaltet sein muss, um eine präzise Bildprüfung zu ermöglichen.

rozcietrzewiacz
quelle
Hmm - das macht Sinn, aber ich glaube, ich hatte gehofft, das Bild und die "anfängliche Ansicht" irgendwie auf 100% setzen zu können, damit es schärfer aussieht.
KWD
1
@cwd Verwechseln Sie den Zoom (eine Methode zum Untersuchen der Datei) nicht mit der eigentlichen Ursache für die Bildglättung: Anti-Aliasing . Das Bild wird ordnungsgemäß gespeichert. Es ist der PDF-Viewer, der Sie zum Narren hält. Es kann aber auch umgekehrt sein, wenn Sie andere Anzeigeprogramme verwenden oder deren Einstellungen ändern. Sie könnten dann ein scharfes Bild in einer PDF-Datei und eine geglättete PNG-Datei in einem Bildbetrachter sehen.
Rozcietrzewiacz
3

Brian Z stellte oben das Folgende zur Verfügung, das die korrekte, vollständig umkehrbare und verlustfreie Methode ist (vorausgesetzt, der Konvertierungsschritt ist tatsächlich verlustfrei, was meiner Meinung nach auch so ist oder zumindest sein sollte), um PNGs in ein PDF-Dokument einzufügen. Sie müssen von png zu verlustfreiem jp2 konvertieren, um mit der PDF-Struktur / den PDF-Readern kompatibel zu sein (glaube ich).

$ convert sample.png -quality 0 sample.jp2
$ img2pdf -o sample.pdf sample.jp2

Es ist jedoch erwähnenswert, dass Sie die .png-Dateien direkt an img2pdf senden können, wie:

$ img2pdf -o sample.pdf sample-page1.png <sample-page2.png ...>

Dies erzeugt die kleinste PDF-Datei und fügt das rohe Hex des PNG verlustfrei in Objekte im PDF ein *.

* Der Nachteil ist, dass dieser Prozess im Gegensatz zu jp2 nicht umkehrbar ist. Die Header- / Footer- und Chunk-Header- / Footer-Daten wurden aus dem eingefügten PNG entfernt (wodurch die Dateien sogar noch kleiner werden!), Sodass nur die Rohdaten des Bildes übrig bleiben (die gelöschten Metadaten werden in die PDF-Struktur integriert). vermutlich, um das pdf zu "hacken", um rohes png anzuzeigen, das technisch nicht mit dem Container kompatibel ist. Es wird in Firefox gut angezeigt und kann in allen modernen Lesern gut angezeigt werden. Wenn jedoch png nicht mit dem Container kompatibel ist, werden die rohen png-Daten möglicherweise nicht von strengen Lesern gerendert (da sie dies nicht erwarten / korrekt verarbeiten sollten).

Hier finden Sie ein extrem rohes Bash-Skript, mit dem ich die PNG-Dateien mit passenden Hashes zu denjenigen, die für die Eingabe in das PDF verwendet wurden, extrahieren und rekonstruieren konnte. https://github.com/jack4455667788/RebuildRawPNGExtractedFromPDF

Jack Hadley
quelle
2

PDF ist ein Vektorformat (dh die Datei enthält eine Beschreibung der zu zeichnenden Linien), während andere Formate (JPG, PNG) Rasterformate sind (die Datei beschreibt, welche Farbe für jedes Pixel gezeichnet werden soll). Wenn Sie eine PDF-Datei in die Luft sprengen, handelt es sich immer noch um scharfe Linien. JPG und PNG zeigen die Pixelung.

(OK, OK, ich habe gelogen. Ein PDF kann auch ein Raster sein).

vonbrand
quelle
2

Ich denke, dass für png-to-pdf- -densityParameter eher klein als groß sein sollte. Sie könnten so etwas versuchenconvert -quality 100 -density 50

user39384
quelle
3
Nein, höhere Dichte ist definitiv besser, habe gerade einen Test durchgeführt, 50 Ergebnisse ergeben viele sehr gut sichtbare Pixel, 300 sind schön und sehen knackig aus.
Shaunhusain
Das hat mich verwirrt, aber ich denke, eine höhere Dichte führt zu einer Ausgabe mit geringerer Auflösung. Dies bedeutet, dass Sie eine niedrigere Dichte wünschen , wenn die Ausgabe unscharf ist (übersteuert, wie im Beispiel in der ursprünglichen Frage) . Wenn eine PDF-Datei jedoch pixelig ist, müssen Sie sie mit einer höheren Dichte konvertieren .
Brian Z