Conversion de plusieurs files image du format JPEG au format PDF

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é:

  • les caractères generics génèrent une list de tous les svgs dans les origs /
  • namesubst prend cette list et produit une list de noms de files png (dossier et extension différents Exemple: origs/foo.svg devient foo.png )
  • Règle 1: all: $(PNG) définit, que la cible "tous" dépend de tous les PNG
  • Règle 2: %.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
  • RUle 3: est juste pour le nettoyage

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)

  • Si vous utilisez 7Z, renommez l'extension de file (suffixe) en .cb7
  • Si vous utilisez ACE, renommez l'extension de file (suffixe) en .cba
  • Si vous utilisez RAR, renommez l'extension de file (suffixe) en .cbr
  • Si vous utilisez TAR, renommez l'extension de file (suffixe) en .cbt
  • Si vous utilisez ZIP, renommez l'extension de file (suffixe) en .cbz

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