我正在使用pdfimages -j bar.pdf /tmp/image
从PDF中提取图片。我的目标是让它们在添加时处于原始状态。所以如果它是.tif我想得到一个.tif,如果它是一个jpg我想得到一个.jpg。我提取的所有东西都持续增加.ppm。
是否可以以原始格式获取图像,或者ppm是我唯一的选择?
更新:我想要这样做的主要目的是检查文档中包含的所有图像的DPI,或者检查它们是否是矢量。
答案 0 :(得分:7)
通过查看PDF中的图像,您无法(可靠地)了解源图像文件格式。例如,TIFF图像可以压缩(在我的头顶)无,RLE,CCITT(耦合变化),LZW,Flate,Jpeg。如果使用DCT(jpeg)压缩PDF中的图像,您如何确定源是TIFF还是Jpeg?如果用Flate压缩,你如何区分TIFF和PNG?此外,它是生成决定压缩的PDF的软件,因此我可以使用Flate压缩的TIFF图像并使用JPEG2000或CCITT压缩图像将其编码为PDF并使用Jbig2或jpeg图像对其进行压缩,将其缩小为8位调色板图像并使用Flate进行压缩。
TL; DR你不知道。
答案 1 :(得分:6)
首先,PDF用语中的内容称为“图像”,根据定义,它总是一个光栅图像。没有“矢量图像”这样的东西。即使转换为PDF的原始文件包含矢量图形,转换器程序也可以决定将它们包含为光栅图像。如果你提取它,你将不会得到你的矢量图形,而是一个光栅图像。 pdfimages
无法提取保存在PDF中的光栅图形。
第二次,您无需使用pdfimages
实际提取图像。如果您使用pdfimages
的'Poppler'分叉的当前版本(晚于v0.20.2),则可以使用-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。
答案 2 :(得分: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
答案 3 :(得分:1)
我要添加另一个答案,该答案涉及原始问题的“更新” :
“我要做的主要目的是检查文档中包含的所有图像的DPI,或者检查它们是否是矢量。”
您可以使用Ghostscript在每个页面上有选择地删除(或保留)文本,像素图像和矢量图形区域。 >
关键是应用新的CLI参数
-dFILTERIMAGE
,-dFILTERTEXT
和/或-dFILTERVECTOR
相应地。
此方法的详细信息在此处描述;答案包含可视化结果的屏幕截图:
How can I remove all images from a PDF?
顶行,从左起:删除了所有“文本”;所有“图像”均已删除;删除所有“向量”。 底部一行:从左开始:仅保留“文本”;仅保留“图像”;仅保留“向量”。
答案 4 :(得分:0)
您需要获取图像XObject(包含原始图像的宽度和高度),然后是实际显示的尺寸,然后您可以将其解决。
答案 5 :(得分:0)
对于那些仍然想知道的人来说,pdfimages -all
是现代解决方案:
-all:以原始格式写入 JPEG、JPEG2000、JBIG2 和 CCITT 图像。 CMYK 文件被写入为 TIFF 文件。所有其他图像都写为 PNG 文件。这相当于指定选项 -png -tiff -j -jp2 -jbig2 -ccitt。