12

画像も含むPDF ドキュメントがあります。

今、これらの画像の解像度を知りたいです。

最初のステップは、どうにかして PDF ドキュメントから画像を取得することです。しかし、どのように?

Cocoaで提供されているものでもそれは可能ですか?

4

5 に答える 5

14

他の質問については、この回答をご覧ください。

-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 と Adob​​e 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-ppiy-ppi72000 y-ppi14401 x-ppi

簡単にわかるように、pdfimagesは他の画像プロパティを決定するのにかなり賢いです:

  1. 5 0表示された画像のすべてのインスタンスに対して同じオブジェクト ID が正しく報告されます。これは、この画像が1 回埋め込まれているが、ページに複数回表示されていることを示しています。
  2. 2x2画像の寸法がピクセルであると正しく報告されます。
于 2012-07-28T09:30:55.560 に答える
6

簡単ではありませんが、可能です。を使用して行うことはできませんがPDFDocument、代わりCGPDF*に Quartz のものを使用できます。CGPDFPageGetDictionary()簡単に言うと、画像が表示されているページの辞書を取得するために使用する必要があります。次に、その XObject に関する情報を辞書から取得します (ストリーム内でインライン化されていないと仮定します)。これも簡単ではありません。PDF 標準を調べて、XObject がどのようにフォーマットされるかを理解してから、さまざまなCG*ルーチンを使用して必要なものにドリルダウンする必要があります。

PDF ドキュメントのデフォルトの DPI (「ユーザー単位」) は 72 であることを付け加えておきます。また、PDF の多くの画像はベクター グラフィックスで作成されるため、実際にはデフォルトの DPI はありません。

于 2012-07-24T18:40:35.427 に答える
1

PDF ドキュメントには固有の解像度がないため、答えは間違いなくノーです。最終的に解決策は、その時点で誰がドキュメントとその要素を処理しているかによって異なります。Adobe Acrobat で使用しているズームの量によっても異なる場合があります。

たとえば、16x16 ピクセルの 2D バーコードを作成し、ドキュメントに追加する前に幅 1 インチ、高さ 1 インチにスケーリングしました。Adobe Acrobat Reader では完全にくっきり (つまり、正方形の要素あたりのピクセル数が多い) に見えますが、結果の PDF をファックス サービスに送信すると、最終的に 100x200 の解像度になります (おおよそ)。同じドキュメントをレーザー プリンターで印刷すると、最終的には 400dpi のようになります。アクロバット リーダーでバーコード イメージをクリックして Gimp にコピー アンド ペーストすると、小さな 16x16 ビットマップとして表示されます。

于 2015-01-23T00:40:24.663 に答える
1

Doコマンドを介してアクセスされる生の画像XObjectの寸法が必要です

于 2012-07-25T07:23:53.713 に答える
-1

この回答は、@ Kurt Pfeifle の回答への補遺として意図されており、Objective C の外部で機能します。

または:

Windows システムを使用していて、コンパイラがセットアップされていない場合は、次の方法が最も簡単です。Windows XPDF バイナリをダウンロードします。を使用pdfimagesして画像を抽出し、それらを BMP 形式に変換するとmspaint、解像度が表示されます。この方法の利点は次のとおりです。

  • 画像サイズを測定することで、推定せずに正確な解像度を得ることができます。

  • のXPDFバージョンで動作しますpdfimages

欠点は次のとおりです。

  • 解像度を変更せずに開くことができる形式にファイルを変換するなど、もう少し作業が必要です。

  • リストを取得するのではなく、ファイルごとに個別にこれを行う必要があります。

  • PDF ファイルに表示される解像度ではなく、画像自体の解像度が表示されます。(Kurt Pfeifle のコメントに感謝)

于 2015-06-12T14:57:28.333 に答える