Als ich das letzte Mal convert
eine solche Aufgabe ausgeführt habe, habe ich die Größe des Ziels explizit über die Größenänderung angegeben:
$ i=150; convert a.png b.png -compress jpeg -quality 70 \
-density ${i}x${i} -units PixelsPerInch \
-resize $((i*827/100))x$((i*1169/100)) \
-repage $((i*827/100))x$((i*1169/100)) multipage.pdf
Der convert
Befehl verwendet nicht immer DPI als Standardeinheit für Dichte / Seitenformat, daher geben wir DPI explizit mit der -units
Option an (andernfalls erhalten Sie möglicherweise unterschiedliche Ergebnisse mit unterschiedlichen Versionen / Eingabeformatkombinationen). Die neue Größe (angegeben über -resize
) ist die Abmessung einer DIN A4-Seite in Pixel. Das Argument resize gibt die maximale Seitengröße an. Welche Auflösung und Qualität genau ausgewählt werden muss, hängt vom Anwendungsfall ab. Ich habe 150 DPI und eine durchschnittliche Qualität ausgewählt, um Platz zu sparen, während es beim Drucken auf Papier nicht allzu schlecht aussieht.
Beachten Sie, dass convert
das Seitenverhältnis bei der Größenänderung standardmäßig nicht geändert wird:
Größe ändern passt das Bild in die gewünschte Größe. Es wird NICHT die gewünschte Kartongröße gefüllt.
( ImageMagick Handbuch )
Abhängig von der ImageMagick-Version und den beteiligten Eingabeformaten ist es möglicherweise in Ordnung, die -repage
Option wegzulassen . Manchmal ist dies jedoch erforderlich, und ohne diese Option enthält der PDF-Header möglicherweise zu kleine Abmessungen. Auf jeden Fall -repage
sollte das nicht schaden.
Die Berechnungen verwenden Integer-Arithmetik, da dies bash
nur unterstützt wird. Mit können zsh
die Ausdrücke vereinfacht - dh durch ersetzt werden $((i*8.27))x$((i*11.69))
.
Lineart Images
Wenn es sich bei den PNG-Dateien um Bilder mit zwei Ebenen (Schwarzweiß oder Lineart) handelt img2pdf
, liefert das Tool bessere Ergebnisse als ImageMagick convert
. Das heißt, es img2pdf
ist schneller und liefert kleinere PDFs.
Beispiel:
$ img2pdf -o multipage.pdf a.png b.png
oder:
$ img2pdf --pagesize A4 -o multipage.pdf a.png b.png
-repage a4
ich es benutze bekomme ich eineninvalid argument for option '-repage': a4
-repage
der a4-Name nicht mehr unterstützt wird. Ich habe das durch Shell-Arithmetik-repage $((150*8.27))x$((150*11.69))
-density 150
Argument wichtig hinzuzufügen.Was Sie wirklich verwenden möchten, ist:
-extent
Erweitert das Bild tatsächlich auf 1240 x 1753,-resize
behält dabei das Bildverhältnis bei und passt es entweder an1240x...
oder an...x1753
.Der
-gravity
Parameter ist optional, kann jedoch verwendet werden, um das Bild beim Erweitern zu zentrieren.quelle
-extent
ist wirklich das, was ich verwenden möchte :) - bitte fügen Sie ein verpasstes linkes Zitat vor -extent hinzu, danke!Ergänzung zu Caugners Antwort :
nachdem installiert IM v6.6.9-7 ich die herausgefunden
-gravity
Parameter Bedarf platziert werden zwischendurch-resize
und-extent
einen Effekt zu haben.zusätzlich (obwohl nicht in der op-frage enthalten) fand ich die einstellung einer anderen hintergrundfarbe ansprechend, was zu dem totalen befehl von führen würde
eine weitere nützliche variante, die ich oft verwende, wenn ich ein bild, das bereits im richtigen seitenverhältnis vorliegt, aber seine individuelle auflösung beibehält, nicht neu skalieren möchte
wobei die Zieldichte dynamisch durch Berechnen der Breite geteilt durch 8,27 (das ist die Breite in Zoll einer A4-Seite) bestimmt wird. Der
-repage a4
Parameter kann die meiste Zeit weggelassen werden, aber ich hatte ein paar Fälle, in denen die resultierende PDF-Datei ein anderes Format hatte als die A4-Abmessungen von 210 x 297 mm (8,27 x 11,6 ").quelle
Ich fand Mikhers Code sehr nützlich, aber er legt die PDF-Datei vollständig als Hochformat oder Querformat aus. Deshalb habe ich sie so geändert, dass sie das Layout jeder Eingabedatei überprüft und mit der Ausgabe übereinstimmt.
Ich habe die Bearbeitung von Yotam nicht berücksichtigt, da sie auf meiner Ubuntu 15.04-Box ohne funktioniert.
quelle
Ich finde das folgende Skript praktisch, das die hier aufgeführten Antworten sowie einige Probleme mit der Gleitkommaberechnung kombiniert:
Das Skript wird aufgerufen (als Datei images2pdf gespeichert)
/ edit: "-l" -Flag entsprechend dem Kommentar von Tanius hinzugefügt, um die Genauigkeit zu verbessern.
quelle
$(echo "150*8.27" | bc)
eignet sich immer noch nicht für Gleitkommazahlen. Funktioniert hier, weil es eine Multiplikation ist. Denn$(echo "150/8.27" | bc)
obwohl, wird das Ergebnis18
(abgeschnitten integer). Rufe stattdessenbc
mit höherscale
: auf$(echo "150/8.27" | bc -l)
, das Ergebnis ist18.137847…
.Ich hatte auch damit zu kämpfen. Basierend auf den obigen Informationen habe ich ein Skript geschrieben, das alphabetisch sortierte Bilddateien zu einer einzelnen PDF-Datei hinzufügt.
Einige Variablen sind innerhalb des Skripts einstellbar. Das hängt von ImageMagick und pdftk ab.
NB: Wenn das Eingabebild eine höhere Auflösung (dpi) als die gewünschte Auflösung von output.pdf hat, wird das Bild auf die niedrigere Auflösung neu abgetastet. Andernfalls wird das Bild nicht erneut abgetastet und nur so erweitert, dass es in den Seitenbereich passt.
quelle
-set density $ImgDens
-density $ImgDens
Ich empfehle das Python CLI-Programm
img2pdf
für eine verlustfreie Konvertierung:https://gitlab.mister-muffin.de/josch/img2pdf
Anwendungsbeispiel:
quelle
Ich habe gerade so etwas wie maxschlepzigs Antwort unter Ubuntu 16.04 / ImageMagick benutzt
Dies zentriert auch das Ergebnis
quelle