Linuxでのpdfからjpgへの高速変換が必要[終了]


11

現在、ImageMagickを使用してPDFをJPEGラスターイメージに変換しています。それは痛々しいほど遅く、多くのメモリを使い果たします。

私が使用したコマンドは次のとおりです。

convert -geometry 1024x768 -density 200 -colorspace RGB foo.pdf bar%02d.jpg

Ghostscriptを使用しているため遅いと思います。 しかし、Linuxボックスでこれを行うには、より高速な方法が必要です。

誰かがより良い解決策を見つけましたか?


どのくらいの時間、どのくらいのメモリですか?
ゾレダチェ

回答:


18

convert間接的にGhostscriptを呼び出すImageMagickのコマンドを使用する代わりに、Ghostscriptを直接使用する方が確かに高速です。また、変換パラメーターをより詳細に制御できます。試してみる

gs \
   -sDEVICE=jpeg   \
   -o bar_%03d.jpg \
   -dJPEGQ=95      \
   -r600x600       \
   -g4960x7016     \
   foo.pdf

どこ

  • -o:出力パス+ファイル名を決定します(使用量を節約します-dBATCH -dNOPAUSE
  • -dJPEGQ:JPEG品質を95%に設定します
  • -r:解像度を600dpiに設定します
  • -g:画像サイズを4960x7016pxに設定します
  • -sDEVICE:出力をJPEGとして設定します

このコマンドはおそらくあなたにとっては遅くなり、予想よりも大きなファイルを作成するでしょう。ファイルサイズを小さくして実行を高速化するには、これを試してください(おそらくconvertコマンドラインの出力品質に近いでしょう):

gs \
   -sDEVICE=jpeg   \
   -o bar_%03d_200dpi_q80.jpg \
   -dJPEGQ=80      \
   -r200x200       \
   -g1653x2339     \
   foo.pdf

あるいは

gs \
   -sDEVICE=jpeg   \
   -o bar_%03d_default_a4.jpg \
   -sPAPERSIZE=a4 \
   foo.pdf

(これは72dpiの解像度を提供し、ほとんどの画面およびほとんどのWebアプリケーションに十分な場合がよくあります)。


1
あなたが正しい。Imagemagickがボトルネックになることは本当にありませんでした。しかし、おそらく試してみるべきだった。素晴らしい例もありがとう!
mat3001

10

ところで、ImageMagickが非常に遅い理由の1つは、Ghostscriptを2回呼び出すことです。PDF => PNGは一度に変換されませんが、2つの異なる手順を使用します。

  • 最初にPDF => PostScript変換にGhostscriptを使用します。
  • 次に、PostScript => PNG変換にGhostscriptを使用します。

次のように入力することで、ImageMagickの「デリゲート」(ImageMagickが使用する外部プログラム、Ghostscriptなど)の詳細設定について知ることができます。

convert -list delegate

(私のシステムでは、32の異なるコマンドのリストです。)次に、PNGへの変換に使用されるコマンドを確認するには、これを使用します。

convert -list delegate | grep -i png

OK、これはLinux向けでした。Windowsを使用している場合は、これを試してください。

convert -list delegate | findstr /i png

IMはPSまたはEPS入力からのみPNGを生成することがわかります。では、IMはどのようにしてPDFから(E)PSを取得しますか?簡単:

convert -list delegate | findstr /i PDF
convert -list delegate | grep -i PDF

あ!Ghostscriptを使用してPDF => PS変換を行い、Ghostscriptを再度使用してPS => PNG変換を行います。動作しますが、Ghostscriptが一度に PDF => PNGを実行できることを知っている場合、最も効率的な方法ではありませんより速く。そして、はるかに良い品質で。

Ghostscriptデリゲートを介したIMの画像へのPDF変換の処理については、まず2つのことを知っておく必要があります。

  1. デフォルトでは、追加のパラメーターを指定しない場合、Ghostscriptは72dpiの解像度で画像を出力します。そのため、Ghostscriptに画像出力に600 dpiの解像度を使用するように指示-density 600するconvertパラメーターとして追加することを提案する場合があります。
  2. IMの迂回は、最初に変換するために、二回Ghostscriptを呼び出してPDF => PS、その後、PS => PNG本当の失態です。あなたは決して勝利せず、最初のステップで品質を維持しますが、非常にしばしばいくつかを失うからです。理由:
    • PDFは透明度を処理できますが、PostScriptでは処理できません。
    • PDFにはTrueTypeフォントを埋め込むことができますが、PostScriptではできません。etc.pp.
      (反対方向への変換PS => PDF、したがって、それほど重要ではありません...)

そのため、Ghostscriptを直接使用してPDFを一度にPNG(またはJPEG)に変換することをお勧めしました。そして、Ghostscriptの最新バージョン8.71(近日リリース予定:9.00)を使用してください...


6

pdftoppmpopplerパッケージのプログラムはJPEGを作成することもでき、私にとってはgs上記の使用の約2倍の速度です。

pdftoppm -jpeg -r 300 foo.pdf foo.jpg

なんて素晴らしい提案でしょう。この答えのおかげでpdftoppmに切り替えたアプリクラッシュの大きなバグを修正しただけで、これまで知らなかった!
-danmactough

あなた、これ、メダルに値する:)
ミラノトドロビッチ

2
gsよりも高速ではありません
ギラスベルハジ

6

私の経験では、MuPDFはGhostscriptよりもはるかに高速です。これは、gsの問題をほとんど伴わない、はるかに新しいプロジェクトです。ユースケースに合うか試してください!

mudraw -w 1024 -h 768 -r 200 -c rgb -o bar%d.png foo.pdf

古いLinuxディストリビューションがあり、リポジトリからmupdf-toolsがインストールされている場合、mudrawまだ呼び出される可能性がありますpdfdraw

次に、たとえばimagemagickを使用して、pngをjpegに変換する必要があります。ただし、Ghostscriptよりも高速です。


2
私のテストでは、MuPDFのPDFからPNGへの変換は、Ghostscriptより約5〜6倍高速です。解決していただきありがとうございます!
ドミトリーアキニン

1
これは非常に便利です。Ghostscriptが数分かかるのに数秒かかり、さらにコマンドラインも簡単です!これを私に知らせてくれてありがとう!
likeitlikeit
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.