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

使用PyMuPDF与pytesseract读取PDF内图片时遇KeyError: 'PNG'问题

解决PyMuPDF转PIL Image后pytesseract报KeyError: 'PNG'的问题

问题原因

该错误源于PyMuPDF的Pixmap转换得到的PIL Image存在格式兼容性问题——尤其是带有Alpha通道(RGBA模式)的图像,在pytesseract处理时,临时保存图像文件会触发格式识别错误。

修正后的代码

import fitz
from PIL import Image
import pytesseract
import pandas as pd  # 原代码遗漏该依赖导入

# 打开PDF文件
pdf_file = fitz.open("file")
text_list = []

for page_number in range(pdf_file.page_count):
    page = pdf_file[page_number]
    # 获取当前页面的图片(推荐使用page.get_images())
    images = page.get_images()
    
    for img in images:
        xref = img[0]
        pix = fitz.Pixmap(pdf_file, xref)
        
        # 处理带Alpha通道的图像,转换为RGB格式
        if pix.n == 4:
            pix = fitz.Pixmap(fitz.csRGB, pix)
        
        # 转换为PIL Image对象
        image_mode = "RGB" if pix.n == 3 else "L"
        image = Image.frombytes(image_mode, [pix.width, pix.height], pix.samples)
        
        # 识别图片文本
        text = pytesseract.image_to_string(image)
        text_list.append(text)
        
        # 释放Pixmap资源,避免内存泄漏
        pix = None

# 转换为DataFrame并输出
df = pd.DataFrame(text_list, columns=["识别文本"])
print(df)

关键修复点

  • 处理Alpha通道:对RGBA模式的Pixmap,通过fitz.Pixmap(fitz.csRGB, pix)转换为纯RGB格式,消除pytesseract处理时的格式冲突。
  • 资源释放:手动释放Pixmap对象,避免长时间运行导致内存占用过高。
  • 补全依赖:添加pandas的导入语句,原代码使用pd.DataFrame但未声明依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 10:17:23