it-swarm-eu.dev

Převod více obrazových souborů z formátu JPG do formátu PDF=)

Chci převést některé soubory z formátu JPEG do formátu pdf. Používám následující příkaz.

$ convert image1.jpg image1.pdf 

Ale mám 100 obrázků. Jak je všechny převést na odpovídající soubory PDF?

Zkusil jsem

$ convert image*.jpg image*.pdf 

To nefunguje.

55
Pratik Deoghare

In bash:

for f in *.jpg; do
  convert ./"$f" ./"${f%.jpg}.pdf"
done
63
enzotib

K tomu můžete použít příkaz mogrify . Normálně modifikuje soubory na místě, ale při převodu formátů zapíše nový soubor (pouze změní příponu tak, aby odpovídala novému formátu). Tím pádem:

mogrify -format pdf -- *.jpg

(Jako enzotib's ./*.jpg, the -- zabraňuje interpretaci jakýchkoli podivných názvů souborů jako přepínačů. Většina příkazů rozpoznává -- znamená „přestat hledat možnosti v tomto bodě“.)

60
cjm

rychlejší, ale neobvyklá syntaxe:

parallel convert '{} {.}.pdf' ::: *.jpg

Běží paralelně (pomocí https://www.gnu.org/software/parallel/ ). V convert jsem si zatím nevšiml žádné vícevláknové operace, což by omezilo efektivní paralelizaci. Pokud je to váš problém, podívejte se do komentáře níže, abyste zjistili, jak nedochází k vícevláknovému zpracování.

24
Sebastian

https://gitlab.mister-muffin.de/josch/img2pdf

Ve všech navrhovaných řešeních zahrnujících ImageMagick jsou data JPEG plně dekódována a překódována. Výsledkem je ztráta generace , stejně jako výkon desetkrát až stokrát horší než img2pdf.

Lze nainstalovat pomocí pip img2pdf za předpokladu, že máte závislosti (např. apt-get install python python-pil python-setuptools libjpeg-dev nebo yum install python python-pillow python-setuptools).

16
Robert Fleming

Zde je způsob, který kombinuje to nejlepší z výše uvedených návrhů do jednoduché, efektivní a robustní příkazové řádky:

find /path/to/files -iname '*.jpg' -exec mogrify -format pdf {} +

Funguje to dobře s názvy souborů, které začínají znakem - Nebo obsahují mezery. Všimněte si použití -iname, Což je nerozlišuje velká a malá písmena verze -name, Takže bude fungovat na .JPG Stejně jako .jpg.

To používá find k získání seznamu souborů namísto Shell globbing s zástupným znakem *.jpg, Což může mít za následek 'Argument příliš dlouhá' chyba na některých systémech. Ačkoli @enzotib ukazuje v komentáři, chování použití globbing ve smyčce for for je odlišný od argumentů příkaz .

find bude také zpracovávat podadresáře, zatímco Shell globbing nebude, pokud náhodou nebudete mít funkce specifické pro Shell, jako je rekurzivní syntaxe globching **/*jpg V zsh.

ÚPRAVA: Myslel jsem, že bych přidal další užitečnou funkci find, kterou jsem si myslel po přečtení komentáře od @ IlmariKaronen o opětovném spuštění příkazu a pouze o převodu souborů, které se změnily od prvního spuštění.

Na prvním průchodu můžete po dokončení převodu touch soubor časového razítka.

find /path/to/files -iname '*.jpg' -exec mogrify -format pdf {} +; touch timestamp

Pak přidejte -newer timestamp Do výrazu find, aby fungoval na podmnožině souborů, jejichž poslední změněný čas je novější než soubor časových razítek. Po každém spuštění pokračujte v aktualizaci souboru časových razítek.

find /path/to/files -iname '*.jpg' -newer timestamp -exec mogrify -format pdf {} +; touch timestamp

Je to snadný způsob, jak se vyhnout nutnosti uchýlit se k Makefile (pokud jej již nepoužíváte), a je to další dobrý důvod, proč se vyplatí používat find, kdykoli je to možné ... má všestrannou expresivitu a zůstává stručný.

13
aculich

Můžete to provést přímo pomocí convert. Toto najdete ve spodní části stránky ImageMagicks o Zpracování příkazového řádk .

convert *.jpg +adjoin page-%d.pdf
9
Frank Zalkow

Pro něco podobného jsem použil následující makefile:

SVG = $(wildcard origs/*.svg)
PNG = $(patsubst origs/%.svg,%.png,$(SVG))

all: $(PNG)

%.png: origs/%.svg
    convert -resize "64x" $< [email protected]


clean: 
    rm $(PNG)

Nyní můžu spustit make a dostanu png soubory pro každý svg soubor, který leží kolem.

pravit

Jak bylo požadováno:

  • zástupné znaky generují seznam všech svgs v origs /
  • pathsubst vezme tento seznam a vytvoří seznam názvů souborů png (různé složky a přípony. Příklad: origs/foo.svg se stane foo.png)
  • Pravidlo 1: all: $(PNG) definuje, že cíl „vše“ závisí na všech PNG
  • Pravidlo 2: %.png: origs/%.svg Definuje, že soubor $ X.png závisí na origs/$ X.svg a lze jej vygenerovat voláním convert ... $< [email protected].
  • PRAVIDLO 3: slouží pouze k čištění
7
reto

Bohužel convert změní obrázek dříve, aby byla minimální ztráta kvality originálu jpg musíte použít img2pdf, Používám tyto příkazy:

1) Tím se vytvoří soubor pdf z každého obrázku jpg bez ztráty rozlišení nebo kvality:

ls -1 ./*jpg | xargs -L1 -I {} img2pdf {} -o {}.pdf

2) Toto zřetězení pdfpages na jednu:

pdftk *.pdf cat output combined.pdf

3) A nakonec přidám textovou vrstvu OCRed, která nemění kvalitu skenování v pdf, takže je lze prohledávat:

pypdfocr combined.pdf  
1

Nástroj MacOS SIPS V systému MacOS (Sierra) poskytuje vestavěný nástroj příkazového řádku Apple sips komplexní přístup ke všem nástrojům Apple pro rastrové obrazy; to bude zahrnovat převod jpg na pdf.

Například ze stávajícího obrázku jpg s malým rozlišením/malou velikostí 'cat.jpg' (o velikosti 8401 bajtů) vytvoří následující příkazový řádek 'cat.pdf', beze změny rastrového rozlišení a minimálního rozšíření velikosti souboru:

$ sips -s format pdf cat.jpg --out 'cat.pdf' 1>/dev/null 2>&1
$ ls -l cat.*
[email protected] 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

Převod do formátu rastru-obrázku Adobe PSD Podobný idiom sips vytváří Adobe kompatibilní *.psd soubory

$ sips -s format psd cat.jpg --out 'cat.psd' 1>/dev/null 2>&1
$ ls -l cat.jpg cat.psd
[email protected] 1 Administration  staff    8401 Jun 18 07:06 cat.jpg
-rw-r--r--+ 1 Administration  staff  350252 Jun 18 07:37 cat.psd

Všimněte si však třicetinásobného rozšíření velikosti souboru, které je přizpůsobeno použití rastrového formátu Adope psd.

Book Production Při výrobě knih ve velkém měřítku, zahrnujících stovky obrázků, které jsou dodávány v různých formátech, byl pro mě pohodlný idiom příkazového řádku pomocí ImageMagick nástrojů k vytvoření čistého soubory rastrových obrázků ve formátu png (se všemi stripovanými metadata a profily barev), pak pomocí sips obnovte jednotnou sadu barevných profilů nebo komentářů a použijte sips také generovat konečné výstupní soubory (nejčastěji *.png, *.psd nebo *.pdf soubory).

1
John Sidles

Jedním z nejjednodušších způsobů, jak převést více souborů, je přejít do adresáře souborů v terminálu linux a napsat:

$ convert *.png mypdf.pdf
1
Ajeet Yadav

Trik by udělal malý skript. (testováno s ksh88 na 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

Potom můžete spustit find a spustit skript:

find dir -name image\*.jpg -exec /bin/ksh script.ksh {} \;

Všimněte si, že obě script.ksh a příkaz find, který jsem vám dal, mohou mít různé syntaxe, které se odvíjí od operačního systému a prostředí, které používáte.

1
rahmu

Řekl jsem si s imagemagickem pro konverzi a paralelně, abych urychlil svůj proces převodu:

ls *.JPEG |parallel convert -density 200 -resize 496X646 -quality 100 {}  ../{.}.PDF
1
Giovanny Canasto