私の提案は次のとおりです。 Ghostscript を使用してください。
動作する ImageMagick が既にインストールされているため、Ghostscript もそこにあることを意味します。ImageMagick は、PDF や PostScript をラスター イメージに変換することはできないため、これを行うにはデリゲートとして Ghostscript を呼び出す必要があります。
Ghostscript は、PDF/PostScript 入力を TIFF/TIF/TIFFg4、JPEG、PBM、PCX、PNG、PNM、PPM、BMP ラスター イメージ出力に直接変換できます。
利点は次のとおりです。ImageMagick を使用する必要はありません。そのため、より高速で、変換パラメーターをより直接的に制御できます。ImageMagick を介して Ghostscript を実行する場合、これは常に必要とは限らない間接的なレベルです。(Ghostscript が生成したラスター イメージ データに微調整と後処理の操作を追加する必要がある場合がありますが、それは当てはまらないようです。)
唯一の欠点は、 Ghostscript が GIF を生成できないことです。GIF が必要な場合(必要ないようです)、Ghostscript のラスター出力を GIF に後処理するために ImageMagick が必要です。
ImageMagick が Ghostscript を呼び出す方法 (および呼び出しに使用するパラメーター - 、またはまたはを含むstderrの出力行を探す) を確認するには、次の例を実行します。gs
gsx
gswin32c
gswin64c
convert -verbose some.pdf[0] some.gif
アップデート
私は非常に非科学的な「ベンチマーク」を実行し、次の 2 つのコマンドをそれぞれ 100 回実行しました。これは、ランダムに選択された公式 PDF 仕様 (PDF-1.7 の ISO バージョン)の 333 ページを GIF に変換し、消費された時間を測定しました。 . これらのコマンドを同時に並行して実行したため、どちらも同じ全体的なシステム負荷を処理する必要があり、結果が比較しやすくなりました。
ImageMagick を使用して「快適に」 convert
GIF を直接生成する:
time for i in $(seq -w 1 100); do
convert \
PDF32000_2008.pdf[333] \
p333-im-no_${i}.gif ;
done
convert
Ghostscript を使用して同じページのグレースケール PNG から作成し、 GIF を取得するためにGhostscript の出力を ImageMagick にパイプします。
time for i in $(seq -w 1 100); do
gs \
-q \
-o - \
-dFirstPage=333 \
-dLastPage=333 \
-sDEVICE=pnggray \
PDF32000_2008.pdf \
| \
convert \
- \
p333-gs-no_${i}.gif ;
done
最初のコマンドのタイミング結果(「快適」を実行しconvert
て PDF->GIF 変換を実現します。これは、Ghostscript を「背後で」のみ使用します):
real 2m29.282s
user 2m22.526s
sys 0m5.647s
2 番目のコマンドのタイミング結果gs
(直接 + オープンに実行し、出力をconvert
次の場所にパイプします。
real 1m27.370s
user 1m23.447s
sys 0m3.435s
もう一つ:
100 個の「Ghostscript」-GIF の合計サイズは 1.6 MB でしたが、8 ビットのグレースケールでした。
100 個の「ImageMagic-direct」-GIF の合計サイズは 1.2 MB でしたが、2 ビットの黒 + 白でした。
結果のファイルをより厳密に比較できるようにするために、テストコマンドラインパラメーターをさらに調整する動機は現在のところありません。
この結果 (149 秒対 87 秒) は、私の推奨事項に従えばパフォーマンスが大幅に向上するという私の推測に十分な自信を与えてくれます。:-)