1

はい、かなり単純な質問をしたことで自分が嫌いです。

PDFから(さまざまなタイプの)画像を抽出するための最良のpythonライブラリについてアドバイスを得たいと思っていました。

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")

あなたがこれを読んでいて、上記のいずれかを書いているなら、私をここまで連れて行ってくれてありがとう。の

誰かがコードを持って私の手を握るのではなく、進めるのに最適なライブラリは何かについてのアドバイスを探しています。

知恵の分け与えを感謝する

ピート

4

0 に答える 0