我能够使用Ned Batchelder 的 Python 代码(我将其转换为 C++)从 pdf 文件中提取 jpg。我想知道是否可以使用相同的技术来提取 tiff 文件,如果可以,有人知道找到它们的适当偏移量和标记吗?谢谢,大卫
2 回答
PDF 文件可能包含不同的图像数据(不足为奇)。
最常见的情况是:
- 传真数据(CCITT Group 3 和 4)
- 具有解码参数和可选调色板的原始栅格数据均使用 Deflate 或 LZW 压缩进行压缩
- JPEG数据
最近,我(作为 PDF 库的开发人员)开始注意到越来越多的带有 JBIG2 图像数据的 PDF。此外,JPEG2000 有时可以放入 PDF。
我应该说,您可能可以在没有外部库的情况下将 JPEG/JBIG2/JPEG2000 数据提取到相应的 //*.jpeg
文件中,但要为损坏的生成器发出的各种奇怪的 PDF 做好准备。此外,PDF 经常使用对象流,因此您需要为 PDF 实现复杂的解析器。*.jp2
*.jpx
传真数据(即您可能称之为 TIFF)至少应该被打包到一个有效的 TIFF 中。例如,您可以从开源 libtiff 借用一些代码。
然后是原始栅格数据。我认为在没有图书馆帮助的情况下尝试提取此类数据是没有意义的。当然,你可以这样做,但这需要几个月的工作。
因此,如果您尝试从使用相同生成器创建的一组 PDF 中仅提取特定类型的图像数据,那么您的任务可能是可行的。在所有其他情况下,我建议节省时间、金钱和头发,并使用库来完成任务。
PDF 文件将 Jpeg 存储为实际的 JPEGS(DCT 和 JPX 编码),因此在大多数情况下,您可以将数据提取出来。使用 Tiffs,您正在寻找 CCITT 数据(但您需要向数据添加标题以使其成为 Tiff)。我在http://www.jpedal.org/PDFblog/2010/09/understanding-the-pdf-file-format-images/和http://www.jpedal.org/上写了 2 篇关于 PDF 文件图像的博客文章PDFblog/2011/07/extract-raw-jpeg-images-from-a-pdf-file/这可能会有所帮助。