You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyMuPDF使用writePNG提取图片报错:AttributeError问题解决

PyMuPDF提取PDF图片报错:AttributeError: 'Pixmap' object has no attribute 'writePNG'

报错信息

line 26, in
pix.writePNG(f'image_Page{pageNumber}_{imgNumber}.png')
^^^^^^^^^^^^
AttributeError: 'Pixmap' object has no attribute 'writePNG'. Did you mean: '_writeIMG'?

问题代码

import fitz

file = fitz.open("file.pdf")

# 提取文本
for pageNumber, page in enumerate(file.pages(), start = 1):
    text = page.get_text()
    txt = open(f'report_Page_{pageNumber}.txt', 'a')
    txt.writelines(text)
    txt.close()

# 提取图片
for pageNumber, page in enumerate(file.pages(), start = 1):
    # 替换了旧方法
    # for imgNumber, img in enumerate(page.getImageList(), start = 1):
    for imgNumber, img in enumerate(page.get_images(), start = 1):
        xref = img[0]
        pix = fitz.Pixmap(file, xref)

        if pix.n < 4:
            pix = fitz.Pixmap(fitz.csRGB, pix)

        # 报错行
        # pix.writePNG(f'image_Page{pageNumber}_{imgNumber}.png')
        # 标注已解决但未修改
        pix.writePNG(f'image_Page{pageNumber}_{imgNumber}.png')

解决方法

PyMuPDF版本更新后,Pixmap对象的writePNG方法已被废弃,替换为通用的save()方法(更推荐使用公开API),或使用提示的_writeIMG方法。

修正报错行

替换原报错代码为:

# 使用save方法,自动识别输出格式
pix.save(f'image_Page{pageNumber}_{imgNumber}.png')

也可以用_writeIMG方法明确指定格式:

# 第二个参数指定保存格式为PNG
pix._writeIMG(f'image_Page{pageNumber}_{imgNumber}.png', format=fitz.PNG)

额外优化建议

提取文本时建议用with语句自动管理文件,避免手动关闭遗漏:

for pageNumber, page in enumerate(file.pages(), start=1):
    text = page.get_text()
    with open(f'report_Page_{pageNumber}.txt', 'a', encoding='utf-8') as txt:
        txt.write(text)

内容的提问来源于stack exchange,提问作者normal_max

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 12:17:12