画像も含むPDF ドキュメントがあります。
今、これらの画像の解像度を知りたいです。
最初のステップは、どうにかして PDF ドキュメントから画像を取得することです。しかし、どのように?
Cocoaで提供されているものでもそれは可能ですか?
画像も含むPDF ドキュメントがあります。
今、これらの画像の解像度を知りたいです。
最初のステップは、どうにかして PDF ドキュメントから画像を取得することです。しかし、どのように?
Cocoaで提供されているものでもそれは可能ですか?
他の質問については、この回答をご覧ください。
-list
基本的に、(新しい)パラメータを Poppler のpdfimages
コマンドライン ユーティリティで使用できるようになりました ( XPDF のバージョンの ! では機能しませんpdfimages
)。
クエリされたページに表示される各画像のサイズを報告します。
(これを使用して PDF から画像を抽出することもできます:は、各画像のファイル名プレフィックスを使用して、最初のページ 3 から最後のページ 5まで、pdfimages -png -f 3 -l 5 some.pdf prefix---
PDF ファイルからすべての画像を PNG として抽出します。あなたの質問の主な焦点ではないようです...)prefix---
pdfimages -list -f 1 -l 3 /Users/kurtpfeifle/Downloads/ct-magazin-14-2012.pdf ページ番号 タイプ 幅 高さ カラー コンプ bpc enc interp オブジェクト ID -------------------------------------------------- ------------------- 1 0 画像 1247 1738 RGB 3 8 jpx no 3053 0 2 1 画像 582 839 グレー 1 8 jpeg no 2080 0 2 2 画像 344 364 グレー 1 8 jpx no 2079 0 3 3 画像 581 838 rgb 3 8 jpeg no 7 0 3 4 画像 1088 776 rgb 3 8 jpx no 8 0 3 5 画像 6 6 RGB 3 8 画像番号 9 0 3 6 画像 8 6 RGB 3 8 画像番号 10 0 3 7 画像 4 6 RGB 3 8 画像番号 11 0 3 8 画像 212 106 rgb 3 8 jpx no 12 0 3 9 画像 150 68 rgb 3 8 jpx no 13 0 3 10 画像 6 6 RGB 3 8 画像番号 14 0 3 11 画像 4 4 RGB 3 8 画像番号 15 0
DPI 解像度を直接報告するわけではありませんが、「幅」と「高さ」の寸法から簡単に計算できます。画面上の画像の幅をインチ定規で測定し、「幅ピクセル」を測定された定規の数...
結果が現在のズーム レベルに依存するため、これは奇妙だと思いますか? はい、そうです!
「解像度」の概念は常に環境に依存します。いわゆる「高解像度」画像は、基本的に常に幅と高さに多くのピクセルがあります。これにより、より高いズーム レベルで画像を表示または印刷する必要がある場合に、品質 (または「解像度」) が向上します。
一方、 (Poppler's) の新しいバージョンがありpdfimages
ます:
$ pdfimages -version
pdfimages version 0.33.0
[....]
x-ppi
これは、水平方向 ( ) および垂直方向 ( )の PPI (ピクセル/インチ) で、埋め込まれた画像の解像度も報告しますy-ppi
。
page num type width height color comp bpc enc interp objectID x-ppi y-ppi size ratio
-------------------------------------------------------------------------------------
1 0 image 1247 1738 rgb 3 8 jpx no 3053 0 151 151 228K 3.6%
2 1 image 582 839 gray 1 8 jpeg no 2080 0 72 72 319B 0.1%
2 2 image 344 364 gray 1 8 jpx no 2079 0 150 150 4325B 3.5%
3 3 image 581 838 rgb 3 8 jpeg no 7 0 73 73 1980B 0.1%
3 4 image 1088 776 rgb 3 8 jpx no 8 0 150 151 106K 4.3%
3 5 image 6 6 rgb 3 8 image no 9 0 150 150 108B 100%
3 6 image 8 6 rgb 3 8 image no 10 0 150 150 158B 110%
3 7 image 4 6 rgb 3 8 image no 11 0 150 150 73B 101%
3 8 image 212 106 rgb 3 8 jpx no 12 0 150 150 2396B 3.6%
3 9 image 150 68 rgb 3 8 jpx no 13 0 150 150 1878B 6.1%
3 10 image 6 6 rgb 3 8 image no 14 0 150 150 81B 75%
3 11 image 4 4 rgb 3 8 image no 15 0 150 150 50B 104%
この新機能は、Poppler バージョン 0.25 (2013 年 12 月 11 日水曜日にリリース) で最初に登場しました。それはさらに報告します...
...埋め込み画像の。
pdfimages -list
pdfimages
また、このユーティリティの制限についても説明し、その出力レポートが完全に正しくない例を示す必要があるかもしれません。
1 つの例は、初心者が PDF ソース コードの構文を学習するのに役立つ、私の(最近作成した) PDF の GitHub リポジトリからのハンドコーディングされた PDF です。
この PDF は、もともとMozilla の PDF.js renderer のバグを示すために作成したものです。PDF.jsでどのように表示されるか (左) と、正しくレンダリングされたときにどのように表示されるか (右、Ghostscript と Adobe Reader でレンダリング)に関するスクリーンショットを次に示します。
(上記の各画像を右クリックします。正確な違いを確認するには、[新しいタブで画像を開く] を選択します...")
PDF ファイルには 2x2 ピクセルの画像が含まれており、(オブジェクト ID を使用して) 1 回だけ埋め込まれていますが、画像が配置されるたびに異なる設定でページに複数回表示されます...5 0
これらの極端な状況下で、この画像のインスタンスの解像度の一部pdfimages -list
を決定しようとすると、鼻が平らになります。
page num type width height color comp bpc enc interp objectID x-ppi y-ppi size ratio
------------------------------------------------------------------------------------
1 0 image 2 2 rgb 3 8 image no 5 0 4 4 13B 108%
1 1 image 2 2 rgb 3 8 image no 5 0 5 3 13B 108%
1 2 image 2 2 rgb 3 8 image no 5 0 3 5 13B 108%
1 3 image 2 2 rgb 3 8 image no 5 0 6 3 13B 108%
1 4 image 2 2 rgb 3 8 image no 5 0 3 10 13B 108%
1 5 image 2 2 rgb 3 8 image no 5 0 4 72000 13B 108%
1 6 image 2 2 rgb 3 8 image no 5 0 4 2 13B 108%
1 7 image 2 2 rgb 3 8 image no 5 0 2 4 13B 108%
1 8 image 2 2 rgb 3 8 image no 5 0 14401 1 13B 108%
1 9 image 2 2 rgb 3 8 image no 5 0 1 2 13B 108%
1 10 image 2 2 rgb 3 8 image no 5 0 0.950 4 13B 108%
1 11 image 2 2 rgb 3 8 image no 5 0 4 0.950 13B 108%
1 12 image 2 2 rgb 3 8 image no 5 0 0.950 4 13B 108%
1 13 image 2 2 rgb 3 8 image no 5 0 1 4 13B 108%
1 14 image 2 2 rgb 3 8 image no 5 0 0.950 4 13B 108%
1 15 image 2 2 rgb 3 8 image no 5 0 0.950 4 13B 108%
1 16 image 2 2 rgb 3 8 image no 5 0 4 0.950 13B 108%
pdfimages -list
回転および/またはスキューが含まれていない場合、ほとんどの値が正しくなります。画像が回転または歪んでいる場合に不一致が生じるのは不思議ではありません。そのような場合にandの値をどのように定義すればよいのでしょうか? これは、画像番号の(完全に間違った)値を説明しています。5および画像番号の場合。8.x-ppi
y-ppi
72000 y-ppi
14401 x-ppi
簡単にわかるように、pdfimages
は他の画像プロパティを決定するのにかなり賢いです:
5 0
表示された画像のすべてのインスタンスに対して同じオブジェクト ID が正しく報告されます。これは、この画像が1 回埋め込まれているが、ページに複数回表示されていることを示しています。2x2
画像の寸法がピクセルであると正しく報告されます。簡単ではありませんが、可能です。を使用して行うことはできませんがPDFDocument
、代わりCGPDF*
に Quartz のものを使用できます。CGPDFPageGetDictionary()
簡単に言うと、画像が表示されているページの辞書を取得するために使用する必要があります。次に、その XObject に関する情報を辞書から取得します (ストリーム内でインライン化されていないと仮定します)。これも簡単ではありません。PDF 標準を調べて、XObject がどのようにフォーマットされるかを理解してから、さまざまなCG*
ルーチンを使用して必要なものにドリルダウンする必要があります。
PDF ドキュメントのデフォルトの DPI (「ユーザー単位」) は 72 であることを付け加えておきます。また、PDF の多くの画像はベクター グラフィックスで作成されるため、実際にはデフォルトの DPI はありません。
PDF ドキュメントには固有の解像度がないため、答えは間違いなくノーです。最終的に解決策は、その時点で誰がドキュメントとその要素を処理しているかによって異なります。Adobe Acrobat で使用しているズームの量によっても異なる場合があります。
たとえば、16x16 ピクセルの 2D バーコードを作成し、ドキュメントに追加する前に幅 1 インチ、高さ 1 インチにスケーリングしました。Adobe Acrobat Reader では完全にくっきり (つまり、正方形の要素あたりのピクセル数が多い) に見えますが、結果の PDF をファックス サービスに送信すると、最終的に 100x200 の解像度になります (おおよそ)。同じドキュメントをレーザー プリンターで印刷すると、最終的には 400dpi のようになります。アクロバット リーダーでバーコード イメージをクリックして Gimp にコピー アンド ペーストすると、小さな 16x16 ビットマップとして表示されます。
Doコマンドを介してアクセスされる生の画像XObjectの寸法が必要です
この回答は、@ Kurt Pfeifle の回答への補遺として意図されており、Objective C の外部で機能します。
Windows システムを使用していて、コンパイラがセットアップされていない場合は、次の方法が最も簡単です。Windows XPDF バイナリをダウンロードします。を使用pdfimages
して画像を抽出し、それらを BMP 形式に変換するとmspaint
、解像度が表示されます。この方法の利点は次のとおりです。
画像サイズを測定することで、推定せずに正確な解像度を得ることができます。
のXPDFバージョンで動作しますpdfimages
。
欠点は次のとおりです。
解像度を変更せずに開くことができる形式にファイルを変換するなど、もう少し作業が必要です。
リストを取得するのではなく、ファイルごとに個別にこれを行う必要があります。
PDF ファイルに表示される解像度ではなく、画像自体の解像度が表示されます。(Kurt Pfeifle のコメントに感謝)