La dernière fois que j'ai utilisé convert
pour une telle tâche, j'ai explicitement spécifié la taille de la destination via le redimensionnement:
$ 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
La convert
commande n'utilise pas toujours le DPI en tant qu'unité de densité / format de page par défaut; nous spécifions donc explicitement le DPI avec l' -units
option (sinon, vous obtiendrez des résultats différents avec des combinaisons de versions / formats d'entrée différentes). Le nouveau format (spécifié via -resize
) correspond à la dimension d'une page DIN A4 en pixels. L'argument resize spécifie la taille maximale de la page. La résolution et la qualité à choisir dépendent exactement du cas d'utilisation. J'ai sélectionné 150 ppp et une qualité moyenne pour gagner de la place alors qu'elle n'a pas l'air trop mauvaise lorsqu'elle est imprimée sur du papier.
Notez que convert
par défaut, le rapport de format ne change pas avec l'opération de redimensionnement:
Redimensionner adaptera l'image à la taille demandée. Il ne remplit pas, la taille de la boîte demandée.
( Manuel ImageMagick )
Selon la version d'ImageMagick et les formats d'entrée concernés, il peut être correct d'omettre l' -repage
option. Mais parfois, cela est nécessaire et sans cette option, l'en-tête PDF pourrait contenir des dimensions trop petites. En tout cas, -repage
ça ne devrait pas faire mal.
Les calculs utilisent une arithmétique entière car bash
ne la supporte que. Avec zsh
les expressions peuvent être simplifiées - ie remplacées par $((i*8.27))x$((i*11.69))
.
Images Lineart
Si les fichiers PNG sont des images à deux niveaux (noir et blanc, aka lineart), l' img2pdf
outil produit des résultats supérieurs à ImageMagick convert
. Cela signifie que img2pdf
c'est plus rapide et que les PDF sont plus petits.
Exemple:
$ img2pdf -o multipage.pdf a.png b.png
ou:
$ img2pdf --pagesize A4 -o multipage.pdf a.png b.png
-repage a4
je reçois uninvalid argument for option '-repage': a4
-repage
le nom a4 ne soit plus supporté. J'ai travaillé autour de cela via l'arithmétique shell:-repage $((150*8.27))x$((150*11.69))
-density 150
argument était important d'ajouter.Ce que vous voulez vraiment utiliser, c'est:
-extent
étend réellement l'image à 1240x1753, tout en conservant-resize
le rapport de l'image, en l'ajustant dans un1240x...
ou...x1753
.Le
-gravity
paramètre est facultatif mais peut être utilisé pour centrer l'image lors de l'extension.la source
-extent
est vraiment ce que je veux utiliser :) - s'il vous plaît, ajoutez la citation manquante à gauche devant -extent, merci!Ajout à la réponse de Caugner :
après avoir installé IM v6.6.9-7, j’ai découvert que le
-gravity
paramètre devait être placé entre les deux-resize
et-extent
avoir un effet.de plus (bien que cela ne fasse pas partie de la question op), j’ai trouvé la possibilité d’attirer une couleur de fond différente, ce qui donnerait la maîtrise totale de
Une autre variation utile que j'utilise souvent lorsque je ne veux pas redimensionner une image qui vient déjà dans le bon rapport d'aspect, tout en conservant sa résolution individuelle.
où la densité cible est déterminée dynamiquement en calculant la largeur divisée par 8.27 (qui est la largeur en pouces d'une page A4). le
-repage a4
paramètre peut être omis la plupart du temps, mais j'ai eu quelques cas où le .pdf résultant aurait un format différent légèrement différent des dimensions A4 de 210x297mm (8.27x11.6 ")la source
J'ai trouvé le code de Mikher très utile, mais le PDF est entièrement présenté sous la forme Portrait ou Paysage, je l'ai donc modifié pour vérifier la mise en page de chaque fichier d'entrée et la faire correspondre à la sortie.
Je n'ai pas inclus l'édition de Yotam car cela fonctionne sans cela sur ma boîte Ubuntu 15.04.
la source
Je trouve le script suivant pratique, qui combine les réponses énumérées ici ainsi que certains problèmes rencontrés avec le calcul en virgule flottante:
Le script est appelé (enregistré dans un fichier images2pdf)
/ edit: Ajout du drapeau "-l" selon le commentaire de tanius pour une meilleure précision.
la source
$(echo "150*8.27" | bc)
n'est pas encore génial pour la virgule flottante. Fonctionne ici car c'est une multiplication. Pour$(echo "150/8.27" | bc)
cependant, le résultat est18
(tronqué à nombre entier). Au lieu de cela, appelezbc
avec plus hautscale
:,$(echo "150/8.27" | bc -l)
le résultat est18.137847…
.Je me débattais aussi avec ça. Sur la base des informations ci-dessus, j'ai écrit un script qui ajoute des fichiers image triés par ordre alphabétique dans un seul fichier PDF.
Certaines variables peuvent être définies dans le script. Cela dépend de ImageMagick et de pdftk.
NB: Si l'image d'entrée a une résolution supérieure (dpi) à la résolution souhaitée de output.pdf, l'image est rééchantillonnée à la résolution inférieure. Sinon, l'image n'est pas ré-échantillonnée et elle est uniquement étendue pour s'adapter au canevas de la page.
la source
-set density $ImgDens
en-density $ImgDens
Je recommande fortement le programme CLI Python
img2pdf
pour la conversion sans perte:https://gitlab.mister-muffin.de/josch/img2pdf
Exemple d'utilisation:
la source
Je viens d'utiliser quelque chose de similaire à maxschlepzigs répondre sous Ubuntu 16.04 / ImageMagick
Cela centre également le résultat
la source
Je voulais convertir une image en taille de page de 5,00 x 8,00 po (vue depuis Adobe Reader) Voici ce que j'ai fait sous Ubuntu 18.04 OS. D'abord, déterminez la taille de la page que je recherche après:
Et le retour est: Taille de la page: 360 x 576 pts
Ensuite, l'image est convertie en un PDF de même taille, comme suit:
Note: installer img2pdf
la source