使用PyMuPDF将PDF转图像时提示Pixmap无writeImage属性报错
报错原因
该错误由PyMuPDF(即导入的fitz库)版本迭代后API变更导致,Pixmap对象的writeImage方法是旧版本(1.18.x及更早)的保存接口,新版本中已经被移除替换。
修复方案
直接将旧的writeImage方法调用替换为新版本对应的save方法即可,修正后的可运行代码如下:
import fitz pdf = fitz.open('cornwall.pdf') page = pdf.load_page(0) pix = page.get_pixmap() pix.save("cornwall_output.png")
适配OpenCV的优化方案
如果你的最终目的是把PDF页面转成OpenCV可处理的格式,不需要先把图片保存到本地再读取,可以直接在内存中完成格式转换,减少不必要的磁盘IO开销,参考代码:
import fitz import cv2 import numpy as np pdf = fitz.open('cornwall.pdf') page = pdf.load_page(0) pix = page.get_pixmap() # 将pixmap原始数据转为numpy数组 img_array = np.frombuffer(pix.samples, dtype=np.uint8).reshape(pix.height, pix.width, pix.n) # 转换为OpenCV默认使用的BGR色彩格式 if pix.n == 4: cv_img = cv2.cvtColor(img_array, cv2.COLOR_RGBA2BGR) else: cv_img = cv2.cvtColor(img_array, cv2.COLOR_RGB2BGR) # 后续直接对cv_img执行OpenCV相关处理即可
补充排查点
- 如果替换方法后仍报错,先执行
pip show pymupdf确认本地安装的版本,1.19.0及之后的正式版本均使用save()作为图片保存接口 - 不要同时安装独立的
fitz包和pymupdf包,二者会产生接口冲突,如果之前装过独立fitz包,先执行pip uninstall fitz卸载后重装最新版pymupdf即可。
内容的提问来源于stack exchange,提问作者Abby Jones
相关产品推荐
相关产品推荐

