web-dev-qa-db-ja.com

LinuxでのPDFからJPGへの高速変換が必要

現在ImageMagickを使用してPDFをJPEGラスターイメージに変換しています。これは非常に遅く、大量のメモリを消費します。

私が使用したコマンドは:

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

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

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

11
mat3001

(Ghostscriptを間接的に呼び出すImageMagickのconvertコマンドを使用する代わりに)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アプリケーションに十分対応できます)。

18
Kurt Pfeifle

ところで、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 inonego。そしてより速く、そしてより良い品質で。

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

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

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

10
Kurt Pfeifle

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

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

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

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

古いLinuxディストリビューションがあり、リポジトリからmupdf-toolsをインストールしている場合、mudrawpdfdrawと呼ばれる可能性があります

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