Je veux convertir certains files de JPEG en pdf. J'utilise la command suivante.
$ convert image1.jpg image1.pdf
Mais j'ai 100 images. Comment devrais-je convertir tous les pdfs correspondants?
j'ai essayé
$ convert image*.jpg image*.pdf
Ça ne marche pas.
En bash:
for f in *.jpg; do convert ./"$f" ./"${f%.jpg}.pdf" done
Vous pouvez utiliser la command mogrify
pour cela. Normalement, il modifie les files sur place, mais lors de la conversion des formats, il écrit un nouveau file (il suffit de changer l'extension pour qu'elle corresponde au nouveau format). Ainsi:
mogrify -format pdf -- *.jpg
(Comme le file enzotib ./*.jpg
, le --
empêche les noms de files étranges d'être interprétés comme des commutateurs. La plupart des commands reconnaissent --
pour signifier "arrêter de chercher des options à ce point".)
syntaxe plus rapide mais inhabituelle:
parallel convert '{} {.}.pdf' ::: *.jpg
Fonctionne en parallèle (en utilisant https://www.gnu.org/software/parallel/ ). Je n'ai pas encore remarqué de multi-threading en convert
, ce qui limiterait la parallélisation effective. Si c'est votre problème, voyez dans le commentaire ci-dessous une méthode pour vous assurer qu'aucun multi-threading ne se produit.
Voici un moyen qui combine le meilleur des suggestions ci-dessus dans une command line simple, efficace et robuste:
find /path/to/files -iname '*.jpg' -exec mogrify -format pdf {} +
Cela fonctionne bien avec les noms de files qui commencent par un -
ou contiennent des espaces. Notez l'utilisation de -iname
qui est la version insensible à la casse de -name
afin qu'il fonctionne sur .JPG
aussi bien que .jpg
.
Cela utilise find
pour get la list des files au lieu de shell globbing avec le caractère générique *.jpg
qui peut aboutir à une erreur de list d'arguments trop longue sur certains systèmes. Bien que les points @enzotib dans un commentaire, le comportement de l'utilisation de la balise dans une boucle for soit différent de celui des arguments d'une command .
De même, find
va gérer les sous-directorys, alors que le shell shell ne le fera pas, à less que vous n'ayez des fonctions propres à votre shell, comme la syntaxe récursive **/*jpg
dans zsh.
EDIT: Je pensais append une autre fonctionnalité utile de find
laquelle j'ai pensé après avoir lu un commentaire de @IlmariKaronen sur la réexécution de la command et uniquement la conversion des files qui ont changé depuis la première exécution.
Lors du premier passage, vous pouvez touch
un file d'horodatage après la conversion.
find /path/to/files -iname '*.jpg' -exec mogrify -format pdf {} +; touch timestamp
Ensuite, ajoutez l' -newer timestamp
à l'expression de find
pour opérer sur le sous-set de files dont l'heure de la dernière modification est plus récente que le file d'horodatage. Continuez à mettre à jour le file d'horodatage après chaque exécution.
find /path/to/files -iname '*.jpg' -newer timestamp -exec mogrify -format pdf {} +; touch timestamp
C'est un moyen facile d'éviter d'utiliser un Makefile (sauf si vous en utilisez déjà un) et c'est une autre bonne raison pour laquelle il vaut la peine d'utiliser find
quand c'est possible … il a une expressivité polyvalente tout en restant concis.
https://gitlab.mister-muffin.de/josch/img2pdf
Dans toutes les solutions proposées impliquant ImageMagick, datatables JPEG sont entièrement décodées et ré-encodées. Cela entraîne une perte de génération , ainsi que des performances "dix à cent" plus pires que img2pdf
.
Peut être installé avec pip img2pdf
condition que vous ayez des dependencies (par exemple apt-get install python python-pil python-setuptools libjpeg-dev
ou yum install python python-pillow python-setuptools
).
Vous pouvez le faire avec convert
directement. Cela se trouve au bas du site ImageMagicks à propos du traitement en command line .
convert *.jpg +adjoin page-%d.pdf
J'ai utilisé le makefile suivant pour quelque chose de similaire:
SVG = $(wildcard origs/*.svg) PNG = $(patsubst origs/%.svg,%.png,$(SVG)) all: $(PNG) %.png: origs/%.svg convert -resize "64x" $< $@ clean: rm $(PNG)
Maintenant, je peux juste exécuter make
et j'obtiens des files png pour chaque file svg qui se trouve autour.
modifier
Comme demandé:
origs/foo.svg
devient foo.png
) all: $(PNG)
définit, que la cible "tous" dépend de tous les PNG %.png: origs/%.svg
définit, le file $ X.png dépend de origs / $ X.svg et peut être généré en appelant convert ... $< $@
.
$<
est la dépendance et $@
est le nom cible Un petit script ferait l'affaire. (testé avec ksh88 sur Solaris 10)
script.ksh
#!/bin/ksh [[ $# != 1 ]] && exit 255 # test for nr of args pdfname=$(sed -e 's/\(.*\)\.jpg/\1\.pdf/' <(echo $"1")) #replace *.jpg with *.pdf convert "$1" $pdfname
Ensuite, vous pouvez exécuter find
pour exécuter le script:
find dir -name image\*.jpg -exec /bin/ksh script.ksh {} \;
Notez que script.ksh
et la command find
je vous ai donnée peuvent avoir différentes syntaxes dépendant sur le operating system et le shell que vous utilisez.
J'ai résolu avec imagemagick pour la conversion et parallèle m'aide à accélérer mon process de conversion:
ls *.JPEG |parallel convert -density 200 -resize 496X646 -quality 100 {} ../{.}.PDF
Grettings
L'utilitaire MacOS SIPS
Sous MacOS (Sierra), l'utilitaire de command line embedded d'Apple offre un access complet à tous les utilitaires d'image raster d'Apple; cela s'avère inclure la conversion de jpg
en pdf
.
Par exemple, à partir d'une image jpg
basse résolution / taille petite 'cat.jpg'
(de 8401 octets), la command line suivante crée 'cat.pdf'
, sans modification de la résolution raster et de l'expansion minimale de taille du file:
$ sips -s format pdf cat.jpg --out 'cat.pdf' 1>/dev/null 2>&1 $ ls -l cat.* -rw-r--r--@ 1 <user redacted> <group redacted> 8401 Jun 18 07:06 cat.jpg -rw-r--r--+ 1 <user redacted> <group redacted> 10193 Jun 18 07:22 cat.pdf
Conversion au format raster-image PSD
d'Adobe Un idiome de sips
similaire crée des files *.psd
compatibles avec Adobe
$ sips -s format psd cat.jpg --out 'cat.psd' 1>/dev/null 2>&1 $ ls -l cat.jpg cat.psd -rw-r--r--@ 1 Administration staff 8401 Jun 18 07:06 cat.jpg -rw-r--r--+ 1 Administration staff 350252 Jun 18 07:37 cat.psd
Notez toutefois l'extension de taille de file de 30 fois qui accompagne l'utilisation du format raster Adope psd
.
La production de livres En faisant de la production de livres à grande échelle, impliquant des centaines d'images, fournies en plusieurs formats, un idiome en command line pratique a été utilisé avec les utilitaires ImageMagick
pour créer des files image raster pures au format png
données et profils colorés supprimés), puis utilisez des sips
pour restaurer un set uniforme de profils de couleur et / ou de commentaires, et utilisez également des sips
pour générer des files de sortie finaux (le plus souvent des files *.png
, *.psd
ou *.pdf
).
Si vous n'utilisez que des files image, peut-être que vous souhaitez utiliser l' archive Comic Book (.cbr, .cbz, .cbt, .cba, .cb7)
C'est beaucoup plus flexible que PDF.
Under Linux you can use software like Comix, Evince, Okular and QComicBook.
https://secure.wikimedia.org/wikipedia/fr/wiki/Comic_book_archive