检查文件是否包含栅格或矢量元素? (pdf,eps,ai)

时间:2011-11-23 13:34:03

标签: php image-processing vector raster

有没有办法检查文件中是否包含栅格元素?我有兴趣为.pdf,.eps和.ai格式做这个。

如果文件只是矢量我将其转换为.svg,如果它有一些栅格元素,我必须将其转换为.png文件。

我在PHP工作,但我也可以使用任何命令行工具。例如,我正在考虑使用Inkscape进行实际转换。

6 个答案:

答案 0 :(得分:4)

您可以在pdf文件上运行此命令,并检查文件中是否存在任何栅格:

  grep -c -i "/image" thisfile.pdf

答案 1 :(得分:1)

如果您是 Linux 用户,则可以使用 Poppler utilities 获取 PDF 中的光栅元素列表:

pdfimages -list filename.pdf

这将返回一个包含每个栅格信息的表: pdfimages_output

从控制台以编程方式解析此信息应该相对简单。例如,在 Python 中你可以使用 subprocess 模块:

out = subprocess.check_output('pdfimages -list filename.pdf', shell=True)

答案 2 :(得分:0)

您可以在EPS / AI文件中搜索DeviceRGB

答案 3 :(得分:0)

您可以将图像转换为EPS格式,并搜索是否存在“ / ImageType”。 “ / ImageType”表示以下对象是光栅图像。如果它不存在于整个EPS文件中,则此EPS是矢量文件。

答案 4 :(得分:0)

“ DisplayImage”的出现似乎表明EPS文件是由光栅图像制成的。 “ DeviceRGB”和“ / ImageType”解决方案不适用于我的EPS文件(这些指令在使用“转换”从PNG文件制成的EPS文件中不存在)。

答案 5 :(得分:-1)

没有。

以下是eps的理论计算机科学证明,证明无法计算所要求的属性。

PostScript(ps)以及Encapsulated PostScript(eps)都是完整的编程语言。在理论计算机科学中,有证据表明用完全语言编写的程序的某些属性无法计算。例如,这样的属性是否给定的程序终止。所以我们知道存在一个PostScript程序,我们无法判断它是否终止。如果我们使用本程序从中删除所有光栅对象并仅插入一个光栅对象,当且仅当程序终止时才会在文档上打印。我们通过在每个程序部分上插入这个光栅打印步骤作为最后一步,这可能导致终止(直接在每个退出命令之前(如果存在这样的命令)和在主结束时)。现在我们有一个PostScript程序,我们无法判断它是否包括打印光栅对象。它确实无法被告知,因为如果我们知道它是否包括打印它,我们也知道它是否终止并且我们已经知道,我们无法计算这个属性。 q.e.d。