2013-01-25 39 views
2

我正在使用pdfimages -j bar.pdf /tmp/image從PDF中提取圖像。我的目標是在添加它們時讓它們處於原始狀態。所以如果它是一個.tif我想得到一個.tif,如果它是一個JPG,我想得到一個.jpg。我提取的所有東西都得到.ppm。如何從原始格式的PDF中提取圖像

是否有可能獲得原始格式的圖像或ppm是我唯一的選擇?

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

回答

6

您無法(可靠地)通過查看PDF中的圖像來了解源圖像文件格式。例如,TIFF圖像可以用(不在我頭頂)壓縮,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你不知道。

+0

我的目標是獲取原始文件是我希望能夠檢查上傳的所有圖像的DPI,以確保至少300 DPI。當我使用Imagick的identifyImage(http://php.net/manual/en/imagick.identifyimage.php)時,它不提供圖像的分辨率,只有寬度/高度。 – Webnet

+3

PDF圖像本身沒有分辨率。圖像由具有寬度和高度的2D樣本集定義。有效的解決方案是將特定圖像放置在任何給定頁面上以及將該頁面呈現給用戶的方式。所以我可以放置一個96×96的圖像在一個1平方英寸的96 dpi,或者我可以把它放在一個2平方英寸,它將是48 dpi。 – plinth

+0

我試圖以編程方式確定圖像是否足夠高以便準確打印。你是否說如果不知道圖像是如何放置在文檔中的話,這是不可能的?即 - 我不能只檢查圖像本身。 – Webnet

2

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

Pdfimages讀取PDF文件,掃描一個或多個頁面,並寫一個PPM,PBM,或JPEG文件爲每個圖像,image-root-nnn.xxx,其中nnn是圖像數量和xxx是圖像類型(.ppm,.pbm,.jpg)

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

此外,還當然可以改變使用例如格式image magick's convert

0

您需要得到圖像X對象(其中包含了原始圖像的寬度和高度),然後顯示的實際尺寸,然後你可以工作了這一點。

3

第一個,PDF術語中稱爲「圖像」的東西,根據定義,它總是一個光柵圖像。沒有像'矢量圖像'這樣的東西。即使轉換爲PDF的原始文件包含矢量圖形,轉換器程序也可能已經決定將它們包括爲光柵圖像。如果你提取這個,你不會得到你的矢量圖形,而是一個光柵圖像。保存在PDF內部的柵格圖形不能由pdfimages提取。

,你並不需要真正提取使用pdfimages圖像。假設您使用的是當前版本(晚於v0.20。2)「poppler的」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是來自Poppl的一個(來自XPDF的那個不是(還有?)支持這個新功能)。

正如您所看到的,它列出了圖像的相應寬度和高度。但是,這還沒有給你任何關於新聞部的線索。如果一個大的光柵圖像被擠壓到PDF頁面的一個小空間裏,那麼你的DPI值就會很高。 (這是他自己的答案的基礎評論也強調...)

爲了計算DPI,您必須測量圖像的寬度/高度,因爲它顯示在頁面上(可以使用Acrobat/Reader中的工具之一來完成此操作),然後使用上述輸出中的相應信息來計算DPI。