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