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
相关产品推荐
相关产品推荐

