pdfimages -all
はネイティブ形式のPDFから画像を抽出することを理解しています。
したがって、そのコマンドから抽出されたJPG(損失のある)画像には、-all
オプションなしで作成された.ppmおよび.pbmファイルと、右クリックして作成されたPNG(損失のない)ファイルと同じピクセル情報が含まれると予想しました画像をEvinceに保存します。
ただし、ImageMagick compare
コマンドを使用すると、JPGファイルに含まれる画像が上記の他のオプションと比較して異なることがわかります。再現するには、このリンクでPDFをダウンロードし( https://fccid.io/document.php?id=2149405 )、pdfimages
およびpdfimages -all
の引数として使用し、 compare
の引数として、最初の.ppmファイルと最初の.jpgファイルを使用します。これを行うと、画像の違いを示す赤を含む画像ファイルが生成されます。
わからないことがありますか? pdfimages
は、.ppmおよび.pbmファイルを作成するときにデフォルトでピクセル情報を追加しますか?
pdfimages -all
は、pdfに保存されたexactファイルを返します。
ラウンドトリップを行うことでこれをテストできます:jpg画像から始めて、LaTeXを使用してそれをpdfに追加し、pdfimages -all
を使用して抽出し、それを元のものと比較します。 (LaTeXを使用する理由については後で説明します。)
リンクから抽出した最初のjpg画像があり、device.jpg
という名前を付けました。 LaTeXを使用してPDFファイルに入れましょう:
$ cat img.tex
\documentclass{article}
\usepackage{graphicx}
\begin{document}
\includegraphics[width=5in,keepaspectratio]{device}
\end{document}
$ pdflatex img
[...snip...]
Output written on img.pdf (1 page, 672455 bytes).
Transcript written on img.log.
それでは、pdfimages -all
を使用してそれを抽出し、元のものと比較しましょう。
$ pdfimages -all img.pdf img-all
$ cmp device.jpg img-all-000.jpg
$
抽出されたjpgは、オリジナルとbyte-for-byte同一です。
上記のテストは、PDF作成者のみを使用して行うことはできません。これは、すべてのPDF作成者が画像をPDFに入れないわけではないためです。たとえば、ImageMagickのconvert
を試してみましょう。
$ convert device.jpg device.pdf
$ pdfimages -all device.pdf device-all
$ cmp device.jpg device-all-000.jpg
device.jpg device-all-000.jpg differ: byte 4, line 1
convert
は、pdfに配置する前に画像をより小さなサイズに再サンプリングしました。
$ ls -1s device.jpg device-all-000.jpg
528 device-all-000.jpg
656 device.jpg
画像の精度は、pdflatexの設計目標の一部でした。他のPDF作成ソフトウェアは、デフォルトで、PDFに配置する前に画像を「最適化」する場合があります。