是的,我讨厌自己问一个非常简单的问题。
我希望就最好的 python 库从 PDF 中提取图像(不同类型)获得一些建议。
我正在尝试获取 PDF 绘图,保存图像及其在 PDF 上的位置,然后将保存的图像放在一组其他 PDF 上的正确位置。
迄今为止,我已经尝试过几次,但被各种错误困住了,我所做的研究表明没有明确和明显的选择。
我已经尝试过 PyPDF2,但在不支持 PNG 过滤器 3 时出现错误。我已经尝试过 PDFMiner,但它仅限于 JPEG,虽然这不是一个交易破坏者,但我仍然无法使用它来提取 JPEG。我还尝试了 PyMuPDF 中的 fitz 模块,并在我的 PDF 上获得了 3 个图像中的 1 个,但是它是反色、倒置、颠倒的。虽然我确信对此有后期处理
老实说,我使用的代码是比我聪明得多的人提出的示例,我已根据需要对其进行了修改。
下面的菲茨
doc = fitz.open(pdf)
for i in range(len(doc)):
for img in doc.getPageImageList(i):
xref = img[0]
pix = fitz.Pixmap(doc, xref)
if pix.n < 5: # this is GRAY or RGB
pix.writePNG("p%s-%s.png" % (i, xref))
else: # CMYK: convert to RGB first
pix1 = fitz.Pixmap(fitz.csRGB, pix)
pix1.writePNG("p%s-%s.png" % (i, xref))
pix1 = None
pix = None
PyPDF2 下面
if __name__ == '__main__':
input1 = PyPDF2.PdfFileReader(pdf)
page0 = input1.getPage(0)
if '/XObject' in page0['/Resources']:
xObject = page0['/Resources']['/XObject'].getObject()
for obj in xObject:
if xObject[obj]['/Subtype'] == '/Image':
size = (xObject[obj]['/Width'], xObject[obj]['/Height'])
data = xObject[obj].getData()
if xObject[obj]['/ColorSpace'] == '/DeviceRGB':
mode = "RGB"
else:
mode = "P"
if '/Filter' in xObject[obj]:
if xObject[obj]['/Filter'] == '/FlateDecode':
img = Image.frombytes(mode, size, data)
img.save(obj[1:] + ".png")
elif xObject[obj]['/Filter'] == '/DCTDecode':
img = open(obj[1:] + ".jpg", "wb")
img.write(data)
img.close()
elif xObject[obj]['/Filter'] == '/JPXDecode':
img = open(obj[1:] + ".jp2", "wb")
img.write(data)
img.close()
elif xObject[obj]['/Filter'] == '/CCITTFaxDecode':
img = open(obj[1:] + ".tiff", "wb")
img.write(data)
img.close()
else:
img = Image.frombytes(mode, size, data)
img.save(obj[1:] + ".png")
如果你正在阅读这篇文章并且你写了上述任何一个,谢谢你让我走这么远哈哈。这
更多地寻找关于什么是最好的库的建议,而不是有人握着我的代码。
欣赏任何智慧的传授
皮特