2013-01-25 38 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。