是的,我恨自己问了一个很简单的问题。
我希望能得到一些关于最好的Python库从PDF中提取图像(不同类型)的建议。
我试图采取PDF绘图,保存图像和它的位置上的PDF从它,然后把保存的图像在正确的位置上的一组其他PDF。
到目前为止,我已经尝试了一些,但被各种错误卡住了,我所做的研究表明,没有明确和明显的选择。
我试过PyPDF2,但得到了一个错误的PNG过滤器3是不支持的。我试过PDFMiner,但它被限制为JPEG,而不是一个交易破坏者,我仍然不能让它提取JPEG。我也试过从PyMuPDF的fitz模块,并得到了我的PDF上的3个图像之一,但它是反转的颜色,向后,颠倒。虽然我相信有后处理
老实说,我所使用的代码是比我聪明得多的人提出的例子,我已经根据需要对它们进行了修改。
菲兹在下面
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")
如果你正在阅读这篇文章,并且你写了上面的任何一个,谢谢你让我走到这一步哈哈。
更多的是寻找关于什么是最好的库进行的建议,而不是有人握着我的手与代码。
欣赏任何智慧的传授
皮特
1条答案
按热度按时间epggiuax1#
PyPDF2(现在)可以做到这一点。