用于图像提取的Python库

sgtfey8w  于 2022-12-21  发布在  Python
关注(0)|答案(1)|浏览(132)

是的,我恨自己问了一个很简单的问题。
我希望能得到一些关于最好的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")

如果你正在阅读这篇文章,并且你写了上面的任何一个,谢谢你让我走到这一步哈哈。
更多的是寻找关于什么是最好的库进行的建议,而不是有人握着我的手与代码。
欣赏任何智慧的传授
皮特

epggiuax

epggiuax1#

PyPDF2(现在)可以做到这一点。

from PyPDF2 import PdfReader

reader = PdfReader("example.pdf")

page = reader.pages[0]
count = 0

for image_file_object in page.images:
    with open(str(count) + image_file_object.name, "wb") as fp:
        fp.write(image_file_object.data)
        count += 1

相关问题