首页 > 解决方案 > 用于图像提取的 Python 库

问题描述

是的,我讨厌自己问一个非常简单的问题。

我希望就最好的 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")

如果你正在阅读这篇文章并且你写了上述任何一个,谢谢你让我走这么远哈哈。这

更多地寻找关于什么是最好的库的建议,而不是有人握着我的代码。

欣赏任何智慧的传授

皮特

标签: pythonimageimagehandler

解决方案


推荐阅读