簡體   English   中英

如何從原始格式的 PDF 中提取圖像

[英]How to extract images from a PDF in their original format

我正在使用pdfimages -j bar.pdf /tmp/image從 PDF 中提取圖像。 我的目標是讓它們在添加時處於原始狀態。 因此,如果是 .tif,我希望獲得 .tif,如果是 jpg,我希望獲得 .jpg。 對於我提取的所有內容,我不斷獲得 .ppm。

是否可以以原始格式獲取圖像,或者 ppm 是我唯一的選項?

更新:我想要這樣做的主要目標是檢查文檔中包含的所有圖像的 DPI,或者檢查它們是否是矢量。

首先,PDF 中所謂的“圖像”,根據定義始終是光柵圖像。 沒有“矢量圖像”這樣的東西。 即使轉換為 PDF 的原始文件包含矢量圖形,轉換程序也可以決定將這些圖形包含為光柵圖像。 如果你提取這個,你不會得到你的矢量圖形,而是一個光柵圖像。 pdfimages無法提取保存在 PDF 中的光柵圖形。

其次,您不需要實際使用pdfimages提取圖像。 只要你正在使用的“poppler的”叉的當前版本(晚於v0.20.2) pdfimages可以使用-list參數來獲取在一定范圍內的PDF頁面的所有圖像的列表:

pdfimages -list -f 7 -l 8  ct-magazin-14-2012.pdf

  page   num  type   width height color comp bpc  enc interp  object ID
  ---------------------------------------------------------------------
     7     0 image     581   838  rgb     3   8  jpeg   no        39  0
     7     1 image       4     4  rgb     3   8  image  no        40  0
     7     2 image     314   332  rgb     3   8  jpx    no        44  0
     7     3 image     358   430  rgb     3   8  jpx    no        45  0
     7     4 image       4     4  rgb     3   8  image  no        46  0
     7     5 image       4     4  rgb     3   8  image  no        47  0
     7     6 image       4     6  rgb     3   8  image  no        48  0
     7     7 image     596   462  rgb     3   8  jpx    no        49  0
     7     8 image       4     6  rgb     3   8  image  no        50  0
     7     9 image       4     4  rgb     3   8  image  no        51  0
     7    10 image       8    10  rgb     3   8  image  no        41  0
     7    11 image       6     6  rgb     3   8  image  no        42  0
     7    12 image     113    27  rgb     3   8  jpx    no        43  0
     8    13 image     582   839  gray    1   8  jpeg   no      2080  0
     8    14 image     344   364  gray    1   8  jpx    no      2079  0

再次注意:這個版本的pdfimages是poppler的一個(從XPDF一個(還)支持這一新功能?)。

如您所見,這列出了圖像的相應寬度和高度。 然而,這(還)並沒有給你任何關於 DPI 的線索。 如果將大光柵圖像壓縮到 PDF 頁面上的一個小空間中,您的 DPI 值將非常高。 (這是底座對他自己的回答的評論也強調的......)

為了計算 DPI,您必須測量顯示在頁面上的圖像的寬度/高度(您可以使用 Acrobat/Reader 中的工具之一進行測量),然后使用來自上面的輸出來計算 DPI。


更新

最新版本的pdfimages現在直接顯示附加列中包含圖像的 DPI 的實際分辨率。 獲取此信息是問題的最初目標:

pdfimages -list -f 6 -l 7 example.pdf
  page   num  type   width height color comp bpc  enc interp  object ID x-ppi y-ppi size ratio
  --------------------------------------------------------------------------------------------
     6     0 image    1901  1901  rgb     3   8  image  no       632  0  1818  1818  468K 4.4%
     6     1 image    1901  1901  rgb     3   8  image  no       645  0  1818  1818  521K 4.9%

新的輸出格式還顯示了每個圖像各自的水平和垂直分辨率( 'x-ppi''y-ppi' )。 它還根據存儲( 'size' )及其壓縮比( 'ratio' )給出圖像的實際大小。

(感謝@Eric 建議更新暗示pdfimages這些新功能。)

通過查看 PDF 中的圖像,您無法(可靠地)知道源圖像文件格式。 例如,TIFF 圖像可以使用(在我頭頂上)none、RLE、CCITT(情侶變體)、LZW、Flate、Jpeg 進行壓縮。 如果 PDF 中的圖像使用 DCT (jpeg) 壓縮,您如何確定源是 TIFF 還是 Jpeg? 如果是用Flate壓縮的,怎么區分TIFF和PNG? 此外,它是生成 PDF 的軟件決定壓縮,所以我可以將 Flate 壓縮的 TIFF 圖像並使用 JPEG2000 或 CCITT 壓縮圖像編碼為 PDF,然后用 Jbig2 或 jpeg 圖像壓縮,將其縮小為8 位調色板圖像並使用 Flate 對其進行壓縮。

TL; DR 你不知道。

我同意底座,您可能無法確定使用的原始圖像格式。 ppm 不是您唯一的輸出選項。

Pdfimages 讀取 PDF 文件,掃描一頁或多頁,並為每個圖像寫入一個PPM、PBM 或 JPEG文件,image-root-nnn.xxx,其中 nnn 是圖像編號, xxx 是圖像類型(.ppm, .pbm、.jpg)

http://linux.die.net/man/1/pdfimages

此外,您當然可以使用例如image magick 的 convert更改格式

我正在添加另一個答案,它涉及原始問題的“更新”說:

“我想要這樣做的主要目標是檢查文檔中包含的所有圖像的 DPI,或者檢查它們是否是矢量。”

您可以使用 Ghostscript 有選擇地刪除(或保留)每頁上的文本像素圖像矢量圖形區域。

關鍵是應用新的 CLI 參數

  • -dFILTERIMAGE
  • -dFILTERTEXT和/或
  • -dFILTERVECTOR

因此。

此處描述了此方法的詳細信息; 答案包含可視化結果的屏幕截圖:

如何從 PDF 中刪除所有圖像?

頂行,從左起:刪除所有“文本”; 刪除了所有“圖像”; 刪除了所有“向量”。 底行,從左起:僅保留“文本”; 只保留“圖像”; 只保留了“向量”。
頂行,從左起:刪除所有“文本”;刪除了所有“圖像”;刪除了所有“向量”。底行,從左起:僅保留“文本”;只保留“圖像”;只保留了“向量”。


您需要獲取圖像 XObject(其中包含原始圖像的寬度和高度),然后是實際顯示的尺寸,然后您就可以解決這個問題。

對於那些仍然想知道的人, pdfimages -all是現代解決方案:

-all:以原始格式寫入 JPEG、JPEG2000、JBIG2 和 CCITT 圖像。 CMYK 文件被寫入為 TIFF 文件。 所有其他圖像都寫為 PNG 文件。 這相當於指定選項 -png -tiff -j -jp2 -jbig2 -ccitt。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM