如何使用Python将PDF转换为最高质量的JPG/PNG?

5
我正在尝试将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")

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

一个好的方法是对生成的图像运行Tesseract OCR - 两种Python方法都给出平均结果,而屏幕截图则给出完美的结果。(我已经尝试过PNG和JPG格式。)

假设我有无限的时间、计算能力和存储空间。我只关心图像质量和OCR输出。很让人沮丧的是,完美的图像就在眼前,但却无法在代码中生成它。

这里发生了什么?有更好的方法可以转换PDF吗?有没有办法获得更直接的控制权?为什么屏幕截图比实际转换做得更好呢?


2
这可能不是一个好主意,通常PDF中的文本是可见的,因此您应该能够直接提取它。如果文本在图像中,则提取图像并直接处理它们,而不是添加另一层或人为物。 - xenoid
请仅返回翻译后的文本:请展示来自Mac的屏幕截图,与另外两种转换方式相比。很可能Mac以比您在其他两种方法中指定的更高DPI拍摄了屏幕截图,因此您应考虑选择更好的DPI值。 - Christoph Rackwitz
我和你一样遇到了convert_from_path()的问题 - 我使用dpi=350调用该方法,但保存的图像只有24dpi???你现在找到更好的解决方法了吗? - ptrckdev
1个回答

3
你可以使用 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...

使用 PyMuPDF 库的 'fitz' 功能,与 'pdf2image' 相比速度快了两倍。 - linello

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接