[英]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更改格式
您需要獲取圖像 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.