使用 Python 从 PDF 中提取高分辨率图像

10
我已使用以下代码从多个 PDF 页面中提取图像,但分辨率相当低。有没有一种方法可以进行调整?
import fitz    
pdffile = "C:\\Users\\me\\Desktop\\myfile.pdf"
doc = fitz.open(pdffile)
for page_index in range(doc.pageCount):
    page = doc.loadPage(page_index)  
    pix = page.getPixmap()
    output = "image_page_" + str(page_index) + ".jpg"
    pix.writePNG(output)

我还尝试使用这里的代码,并将“if pix.n < 5”更新为“if pix.n - pix.alpha < 4”,但在我的情况下没有输出任何图像。

3个回答

11

如PyMuPDF的此问题所述,您需要使用矩阵: GitHub上的问题

给出的示例代码为:

zoom = 2    # zoom factor
mat = fitz.Matrix(zoom, zoom)
pix = page.getPixmap(matrix = mat, <...>)

在该问题中提到,如果您不使用矩阵,缺省分辨率为72 dpi,这很可能解释了您获得低分辨率的原因。

2
请注意,PyMuPDF中的驼峰命名已更改为蛇形命名 - 还有一些全新的名称,例如pix.writePNG变成了pix.save等等。这发生在v1.18.4中,并且自1.20.0以来是强制性的。 - Jorj McKie

4
比制作矩阵更简单的是,getPixmap() 的文档表明您可以使用 dpi 参数获得更高的分辨率:
pix = page.getPixmap(dpi=200)

这是从v1.19.2开始的新内容。


0
要获得最佳质量,请使用“ matrix”和“ dpi”。这段代码解决了结果更高分辨率的问题。我实现了一个解决方案,以最好的质量将文件夹中的所有文件转换成目标格式。
# pip install fitz
# pip install pip install PyMuPDF==1.19.0

import fitz
import glob

for filename in glob.glob("*.pdf"):
    pdffile = filename
    doc = fitz.open(pdffile)
    for page_index in range(doc.pageCount):
        try:
            page = doc.load_page(page_index)  
            zoom = 2 
            mat = fitz.Matrix(zoom, zoom)
            pix = page.get_pixmap(matrix = mat,dpi=1200)
            output = '_' + filename.replace(".pdf","") + "-" + str(page_index) + ".png"
            pix.save(output)
        except Exception as e:
            print(str(filename) + ' > ' + str(e))    
    doc.close()

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