【发布时间】:2019-01-05 04:01:01
【问题描述】:
我正在使用 Python 编程,但如果某些工具/库以另一种语言存在,对我有很大帮助,我愿意接受建议。
我有大量存在于数据库中的 pdf 页面,我正在尝试自动收集这些页面以使用它们构建一些图像识别模型。
这些“pdf”实际上只是用 PDF 包装器封装的 PNG 图像(大概是这样它们可以被 Adobe Acrobat 等 PDF 阅读器读取)。我需要将图像格式的 pdf 输入图像识别模型管道。我假设它们是 PNG 图像,因为当我从浏览器保存图像(即右键单击并将图像另存为)时,生成的文件是 PNG 文件。
阅读this question from 2010 并查看this blog post from 2007 后,我得出结论,必须有一种方法可以从PDF 中提取PNG 字节数组,而不是将PDF 重新转换为新图像。奇怪的是,我找不到带有
的PNG文件头#Python 3.6
header = bytes([137, 80, 78, 71, 13, 10, 26, 10])
#the resulting header looks like this: b'\x89PNG\r\n\x1a\n'
file.find(header)
这是否意味着嵌入的图像实际上不是 PNG 图像?
如果没有简单的方法来提取嵌入的图像字节数组,我可以使用什么工具将每个 PDF 文件自动转换为某种图像格式(最好是 JPEG、PNG 或 TIFF)?
编辑:我知道 ImageMagick 之类的工具可用于格式转换,但我真的更愿意使用提取方法来了解有关这些文件格式的更多信息。
【问题讨论】:
-
如果 PDF 确实包含光栅图像,您可以使用 pdfimages 提取它。见en.wikipedia.org/wiki/Pdfimages。
-
“为了了解有关这些文件格式的更多信息。” - 在这种情况下,只需从 pdf 规范 ISO 32000 开始。Adobe 已共享第 1 部分的副本他们的网站应该足够开始了。
-
PDF 页面内容流不能包含 PNG 数据。你怎么知道 PDF 页面只是图像?所有 PDF 文件是否来自同一来源?如果是这样,它们是否都使用相同的图像压缩存储?此外,您的图像识别模型是否更喜欢某些输入(例如灰度 TIFF?)
-
PNG 图像不像 PDF 中的 JPEG 文件那样按原样存储,而是使用与 PNG 文件格式相同的压缩和过滤算法重新编码为特定格式;实际上,PDF 规范指的是 PNG 规范。这意味着某些 PNG 的 数据流 可以直接嵌入到 PDF 中,但不是全部(例如大多数具有透明度的 PNG)。并且 PNG 的各个元信息部分必须转换为它们的 PDF 对应部分。