如何在 Python 中以尽可能高的质量将 PDF 转换为 JPG/PNG?

sam*_*les 6 python image imagemagick wand

我想将 PDF 转换为图像,以便可以对其进行 OCR。但在转换过程中质量会下降。

使用 Python 将 PDF 转换为图像(JPG/PNG)似乎有两种主要方法 - pdf2imageImageMagick / Wand

#pdf2image (altering dpi to 300/600 etc does not seem to make a difference):
pages = convert_from_path("page.pdf", dpi=300)
    for page in pages:
        page.save("page.jpg", 'JPEG')

#ImageMagick (Wand lib)
with Image(filename="page.pdf", resolution=300) as img:
    img.compression_quality = 100
    img.save(filename="page.jpg")
Run Code Online (Sandbox Code Playgroud)

但如果我只是在 Mac 上截取 PDF 的屏幕截图,质量会比使用任何一种 Python 转换方法都要高。

看到这一点的一个好方法是在生成的图像上运行 Tesseract OCR - 两种 Python 方法都给出平均结果,而屏幕截图给出完美结果。(我尝试过 PNG 和 JPG。)

假设我有无限的时间、计算能力和存储空间。我只对图像质量和 OCR 输出感兴趣。完美的图像触手可及,但却无法在代码中生成,这是令人沮丧的。

这里发生了什么?有没有更好的方法来转换 PDF?有没有办法可以更直接地控制?是什么让屏幕截图比实际转换效果更好?

小智 4

您可以使用PyMuPDF并设置您想要的 dpi:

import fitz

doc = fitz.open('some/pdf/path')
page = doc.load_page(0)
pixmap = page.get_pixmap(dpi=300)
img = pixmap.tobytes()
# Continue with whatever logic...
Run Code Online (Sandbox Code Playgroud)