【问题标题】:Extracting embedded PNG byte streams from PDF从 PDF 中提取嵌入的 PNG 字节流
【发布时间】:2019-01-05 04:01:01
【问题描述】:

我正在使用 Python 编程,但如果某些工具/库以另一种语言存在,对我有很大帮助,我愿意接受建议。

我有大量存在于数据库中的 pdf 页面,我正在尝试自动收集这些页面以使用它们构建一些图像识别模型。

这些“pdf”实际上只是用 PDF 包装器封装的 PNG 图像(大概是这样它们可以被 Adob​​e 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 对应部分。

标签: pdf png


【解决方案1】:
pip install pdf2image
pip install pillow
pip install numpy
pip install opencv-python

那么,

import numpy as np 
from pdf2image import convert_from_path as read 
import PIL 
import cv2 
#pdf in the form of numpy array to play around with in OpenCV or PIL 
img = np.asarray(read('path to the pdf file')[0])#first page of pdf
cv2.imwrite('path to save the image with the file extension',img)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-10
    • 2018-06-16
    • 1970-01-01
    • 2016-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多