いくつかのファイルをjpegからpdfに変換したい。私は次のコマンドを使用しています。
$ convert image1.jpg image1.pdf
しかし、私は100枚の画像を持っています。それらすべてを対応するPDFに変換するにはどうすればよいですか?
私は試した
$ convert image*.jpg image*.pdf
機能しません。
いくつかのファイルをjpegからpdfに変換したい。私は次のコマンドを使用しています。
$ convert image1.jpg image1.pdf
しかし、私は100枚の画像を持っています。それらすべてを対応するPDFに変換するにはどうすればよいですか?
私は試した
$ convert image*.jpg image*.pdf
機能しません。
回答:
bashの場合:
for f in *.jpg; do
convert ./"$f" ./"${f%.jpg}.pdf"
done
-
です。
mogrify
ますが、入力はずっと少なくなります。私の答えをご覧ください。
mogrify
これにはコマンドを使用できます。通常、ファイルをインプレースで変更しますが、形式を変換するときに新しいファイルを書き込みます(新しい形式に合わせて拡張子を変更するだけです)。副<文>この[前述の事実の]結果として、それ故に、従って、だから◆【同】consequently; therefore <文>このような方法で、このようにして、こんなふうに、上に述べたように◆【同】in this manner <文>そのような程度まで<文> AひいてはB◆【用法】A and thus B <文>例えば◆【同】for example; as an example:
mogrify -format pdf -- *.jpg
(enzotibのように、奇妙なファイル名がスイッチとして解釈される./*.jpg
のを--
防ぎます。ほとんどのコマンドは--
、「この時点でオプションの検索を停止する」ことを意味します。)
mogrify
代わりに使用することをお勧めしますconvert
。これは100個のファイルで機能しますが、globbingを使用し*.jpg
ても数千個のファイルに拡張できません。これは、単純な1行のfind
コマンドをと組み合わせることで実行できます。
*.jpg
を*.png
単一に変換する方法は*.pdf
?それらは番号付きファイル(例:)で1.jpg 2.png 3.png 4.jpg
あり、その順序はpdf出力で維持/保存する必要があることに注意してください。
*.jpg
のをに変換し*.png
、ステップ2で答えに相当することを実行します...
より高速だが異常な構文:
parallel convert '{} {.}.pdf' ::: *.jpg
並行して実行します(https://www.gnu.org/software/parallel/を使用)。私はconvert
まだマルチスレッドに気づいていないので、効果的な並列化が制限されます。それが心配な場合は、マルチスレッドが発生しないようにする方法について、以下のコメントを参照してください。
parallel
環境変数を設定することにより、これを無効にすることができます(GNUなどのアプリケーションレベルの並列化を使用する場合)MAGICK_THREAD_LIMIT=1
。
https://gitlab.mister-muffin.de/josch/img2pdf
ImageMagickを含む提案されたソリューションのすべてで、JPEGデータは完全にデコードされ、再エンコードされます。これにより、世代の損失が発生するだけでなく、パフォーマンスが「10〜100倍」低下しimg2pdf
ます。
pip img2pdf
依存関係がある場合(apt-get install python python-pil python-setuptools libjpeg-dev
またはyum install python python-pillow python-setuptools
)にインストールできます。
convert some.jpg -format pdf -compress jpeg generated.pdf ; pdfimages -j generated.pdf generated.pdf ; diff -sq some.jpg generated.pdf-000.jpg
。私見この答えは、より多くの賛成に値します。実際、convert
ここで失敗し、img2pdf
そのようなテストに合格し、必要に応じて生成されたpdfを微調整するために、画像サイズ、ページサイズなどを設定する多くのオプションも含まれます。
img2pdf
Ubuntu 16.04の通常のリポジトリで利用可能であり、手動で操作する必要はpip
ありません。また、アップデートのメリットを享受できます。
以下は、上記の提案の最良のものを、シンプルで効率的で堅牢なコマンドラインに結合する方法です。
find /path/to/files -iname '*.jpg' -exec mogrify -format pdf {} +
で始まるファイル名-
またはスペースを含むファイル名で正常に機能します。使用に注意-iname
している大文字と小文字を区別しないバージョンの-name
それは上で動作するので、.JPG
ちょうどなどを.jpg
。
これは、一部のシステムで「引数リストが長すぎます」エラーが発生する可能性がfind
ある*.jpg
ワイルドカードを使用したシェルグロビングの代わりに、ファイルリストを取得するために使用します。@enzotibはコメントを指しているが、forループでグロビングを使用する動作は、コマンドのargumentsの場合とは異なります。
また、find
サブディレクトリを処理しますが、シェルグロビングは**/*jpg
、zshの再帰的グロビング構文などのシェル固有の機能を使用しない限り実行しません。
編集:コマンドを再実行し、最初の実行以降に変更されたファイルのみを変換することについて@IlmariKaronenfind
がコメントを読んだ後に考えた別の便利な機能を追加すると思いました。
最初のパスでtouch
は、変換が終了した後にタイムスタンプファイルを作成できます。
find /path/to/files -iname '*.jpg' -exec mogrify -format pdf {} +; touch timestamp
次に-newer timestamp
、find
式に追加して、最終変更時刻がタイムスタンプファイルより新しいファイルのサブセットを操作します。各実行後にタイムスタンプファイルの更新を続けます。
find /path/to/files -iname '*.jpg' -newer timestamp -exec mogrify -format pdf {} +; touch timestamp
これは、Makefileを使用する必要がないようにする簡単な方法です(既に使用している場合を除く)find
。これは、可能な限り使用する価値があるもう1つの正当な理由です。
これはconvert
直接行うことができます。これは、ImageMagicksサイトのコマンドライン処理についての下部にあります。
convert *.jpg +adjoin page-%d.pdf
convert *.jpg -adjoin output.pdf
結合されたPDF
同様のことをするために、次のメイクファイルを使用しました。
SVG = $(wildcard origs/*.svg)
PNG = $(patsubst origs/%.svg,%.png,$(SVG))
all: $(PNG)
%.png: origs/%.svg
convert -resize "64x" $< $@
clean:
rm $(PNG)
これで実行できるようにmake
なり、周囲にあるすべてのsvgファイルのpngファイルを取得できます。
編集
要求どおり:
origs/foo.svg
なりますfoo.png
)all: $(PNG)
ターゲット「all」はすべてのPNGに依存することを定義します%.png: origs/%.svg
定義、ファイル$ X.pngはorigs / $ X.svgに依存し、を呼び出すことで生成できますconvert ... $< $@
。
$<
依存関係であり、 $@
ターゲット名ですmake
再度入力すると、変更されたPDF のみが再変換されます。
小さなスクリプトがトリックを行います。 (Solaris 10でksh88でテスト済み)
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
次にfind
、スクリプトを実行するために実行できます。
find dir -name image\*.jpg -exec /bin/ksh script.ksh {} \;
両方script.ksh
と、find
私があなたに与えたコマンドは、使用しているOSとシェルによって異なる構文を持っているかもしれないことに注意してください。
pdfname=${1%.*}.pdf
ファイルの拡張子をに置き換えますpdf
。この方法ははるかに簡単で、ファイル名に特殊文字が含まれていても機能します。関連するメモで、変数の置換を二重引用符で囲みます。
MacOSユーティリティSIPS
MacOS(Sierra)では、Appleの組み込みコマンドラインユーティリティsips
により、Appleのすべてのラスターイメージユーティリティへの包括的なアクセスが提供されます。これは、への変換を含むことが判明しましjpg
たpdf
。
たとえば、既存の低解像度/小サイズのjpg
画像'cat.jpg'
(サイズ8401バイト)から、次のコマンドラインはを作成します'cat.pdf'
。ラスター解像度は変更せず、ファイルサイズの拡張は最小限です。
$ 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
AdobeのPSD
ラスターイメージ形式への変換 同様のsips
イディオムはAdobe互換*.psd
ファイルを作成します
$ 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
ただし、Adope psd
ラスタ形式の使用に伴う30倍のファイルサイズ拡張に注意してください。
本の制作 複数の形式で提供される数百の画像を含む大規模な本の制作では、便利なコマンドラインのイディオムがImageMagick
ユーティリティを使用してpng
形式の純粋なラスター画像ファイルを作成しました(すべてのメタデータとカラープロファイルを剥離アウト)、その後、使用sips
カラープロファイルおよび/またはコメントの均一なセットを復元し、使用するためにsips
、最終的な出力ファイル(最も一般的に生成することも*.png
、*.psd
または*.pdf
)ファイルを。
残念ながらconvert
、jpg
使用する必要があるオリジナルの品質の損失を最小限に抑えるために、前に画像を変更しますimg2pdf
。私はこのコマンドを使用します:
1)これにより、解像度または品質を損なうことなくpdf
、すべてのjpg
画像からファイルを作成できます。
ls -1 ./*jpg | xargs -L1 -I {} img2pdf {} -o {}.pdf
2)これにより、pdf
ページが1つに連結されます。
pdftk *.pdf cat output combined.pdf
3)最後に、PDFのスキャンの品質を変更しないOCRedテキストレイヤーを追加して、検索可能にする:
pypdfocr combined.pdf
私は変換のためにimagemagickで解決し、変換プロセスを加速するために並列しました:
ls *.JPEG |parallel convert -density 200 -resize 496X646 -quality 100 {} ../{.}.PDF
画像ファイルのみを使用する場合は、コミックブックアーカイブ(.cbr、.cbz、.cbt、.cba、.cb7)を使用することをお勧めします
これはPDFよりもはるかに柔軟です。
Under Linux you can use software like Comix, Evince, Okular and QComicBook.
https://secure.wikimedia.org/wikipedia/en/wiki/Comic_book_archive