为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕田峪9158850 2023-07-27 16:42:21
我已成功使用以下代码从多个 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 回答

?
红糖糍粑

TA贡献1815条经验 获得超6个赞

给出的例子是:

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

该问题还指出,如果您不使用矩阵,则默认分辨率为 72 dpi,这可能解释了您的分辨率较低的原因。


查看完整回答
反对 回复 2023-07-27
?
守候你守候我

TA贡献1802条经验 获得超10个赞

比制作矩阵更简单,文档显示getPixmap()您可以使用该dpi参数来获得更高分辨率:

pix = page.getPixmap(dpi=200)

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


查看完整回答
反对 回复 2023-07-27
?
森栏

TA贡献1810条经验 获得超5个赞

为了获得最佳质量,请使用“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()


查看完整回答
反对 回复 2023-07-27
  • 3 回答
  • 0 关注
  • 214 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信