私が使用してpdfファイルをたくさんのjpgファイルに変換するとき
convert -quality 100 file.pdf page_%04d.jpg
かなりの品質の低下があります。
ただし、次のようにすると、(目立った)品質の低下はありません。
Gscan2pdfを起動し、ファイル->インポート(そしてfile.pdfを選択)を選択します。次に、gscan2pdfの一時ディレクトリに移動します。多くのpnmファイルがあります(pdfファイルのページごとに1つ)。今私がやります
for file in *.pnm; do
convert $file $file.jpg done
結果のjpgファイルは、(ほぼ)元のpdfと同じ品質です(これが私が望んでいるものです)。
さて、私の質問は、目立った品質の低下なしにPDFファイルを一連のJPGファイルに変換する簡単なコマンドラインの方法がある場合です。 (上記のソリューションは複雑すぎて時間がかかります)。
「品質の低下」が何を意味するのかは明確ではありません。それは多くの異なることを意味する可能性があります。説明のためにいくつかのサンプルを投稿できますか?おそらく、同じ部分を低品質バージョンと高品質バージョンから切り取ります(さらなる品質低下を避けるためにPNGとして)。
おそらく、より高いdpiで変換するには-density
を使用する必要があります。
convert -density 300 file.pdf page_%04d.jpg
(必要に応じて、-units PixelsPerInch
または-units PixelsPerCentimeter
を付加できます。私のコピーはデフォルトでppiです。)
更新:ご指摘のとおり、gscan2pdf
(使用方法)はpdfimages
のラッパーにすぎません(from poppler )。 pdfimages
は、PDFが入力として与えられた場合にconvert
が行うことと同じことを行いません。
convert
はPDFを受け取り、それをある解像度でレンダリングし、結果のビットマップをソース画像として使用します。
pdfimages
はPDFを介して埋め込まれたビットマップ画像を探し、それぞれをファイルにエクスポートします。 PDF内のテキストまたはベクター描画コマンドはすべて無視されます。
その結果、あなたが持っているものがPDFである場合、それは一連のビットマップの単なるラッパーであり、pdfimages
は生データを取得するので、それらを抽出するはるかに優れた仕事をします元のサイズで。 PDFには未加工のJPEGデータを含めることができるため、-j
オプションをpdfimages
に使用することもできます。デフォルトでは、pdfimages
はすべてをPNM形式に変換し、JPEG> PPM>の変換は不可逆なプロセスです。
だから、試してみてください
pdfimages -j file.pdf page
convert
から.jpg
の手順を実行する必要がある場合とない場合があります(PDFが使用していたビットマップ形式によって異なります)。
一連のJPEG画像から作成したPDFでこのコマンドを試しました。抽出されたJPEGは、ソースイメージとバイトごとに同一でした。それ以上のクオリティはありません。
学生の答えが言ったように、pdfimages
は良いオプションです。私の経験から、正しいdpiを指定しても、gs
とconvert
はどちらも低品質にエクスポートされます。
ただし、PDFにページごとに複数のレイヤーがある場合、pdfimages
は機能せず、レイヤーを個別の画像として抽出します。その場合、inskcape
を使用してページをエクスポートすることをお勧めします。
これは私が使用するコマンドです:
pdftk combined_to_do.pdf burst output pg_%04d.pdf
ls ./pg*.pdf | xargs -L1 -I {} inkscape {} -z --export-dpi=300 --export-area-drawing --export-png={}.png
最初のコマンドはすべてのページを分割し、2番目のコマンドはページごとにpngに変換します。あなたはそれらをpngのままにするか、単にそれらをjpegに変換することができます
ls ./p*.png | xargs -L1 -I {} convert {} -quality 100 -density 300 {}.jpg
pdfimages
、gs
、およびImageMagickのconvert
と比較すると、inkscape
のエクスポートが最高品質であることがわかります。
@cjmからの応答は正しいですが、GUIが好きで、すべてのpdfページをレンダリングしたくない場合は、単に画像を取得するために、gimpを使用します。
GimpでPDFを開くと、すべてのページがレンダリングされたインポートウィンドウが表示されます。必要なページを選択し、解像度を600 pix /インチに設定します(多くの場合、300がシャープになりすぎることがわかりました)。 「ファイル/エクスポート」で希望のフォーマットに保存
とにかく、コマンドラインから目的のページを選択するためのフラグが必要です。
Gscan2pdfのソースコードを見ると、pdfimagesを使用していることがわかりました。そう pdfimages file.pdf page
はpage-001.ppm, page-002.ppm
など.
質問で明確でないのは、PDF内のテキストおよびベクターグラフィックスについて話しているのか、またはPDFに埋め込み画像が含まれているかどうかです。
Gscan2pdfについて読んだところで、あなたのpdfファイルには(のみ)埋め込みグラフィックが含まれていると思います。
convert
は、内容が何であるかに関係なく、基本的にPDFを「印刷」します。 @cjmが提案するように、印刷密度を変更したい場合があります。これは、ベクターグラフィックの品質を向上させる唯一の方法です。
代わりに、埋め込み画像を抽出したい場合(gscan2pdfがそうであるように)、密度を推測すると、通常、品質の低下または必要以上の品質(およびディスク領域の浪費)が発生します。答えは、PDFを印刷するのではなく、画像を抽出することです。 この記事を参照 基本的には、品質を損なうことなく画像を抽出するためにpdfimages
の使用を推奨しています。