PyMuPDF 极速入门:从零开始提取 PDF 中的全部图片

适用场景:备考刷题、整理错题本、提取 PDF 配图(E-R图、UML图、几何图形等)
工具:Python 3.11 + PyMuPDF (fitz)
耗时:约 5 分钟

1. 检查 Python 环境

打开终端(CMD 或 PowerShell),确认 Python 已安装:

python --version
# 应输出类似:Python 3.11.15

如果提示 'python' 不是内部或外部命令,尝试用 py 代替:

py --version

2. 安装 PyMuPDF 库

使用国内镜像源(清华)加速下载:

pip install PyMuPDF -i https://pypi.tuna.tsinghua.edu.cn/simple

安装完成后,验证是否成功:

python -c "import fitz; print('PyMuPDF 已安装,版本:', fitz.__version__)"

3. 探测 PDF 基本信息(可选但建议)

在正式提取前,先确认你的 PDF 能被正常读取,并查看总页数:

python -c "import fitz; doc=fitz.open(r'你的PDF文件路径.pdf'); print(f'成功打开,共{len(doc)}页')"
📌 路径建议:Windows 路径建议用原始字符串 r"...",避免反斜杠转义问题。

4. 编写裁剪脚本

新建一个文本文件,命名为 extract.py,粘贴以下内容:

import fitz
import os
from pathlib import Path

# ====== 修改这两个路径 ======
pdf_path = r"你的PDF文件路径.pdf"      # 例如 r"D:\资料\真题.pdf"
output_dir = r"./extracted_images"     # 图片保存目录
# ===========================

Path(output_dir).mkdir(parents=True, exist_ok=True)
doc = fitz.open(pdf_path)
print(f"📄 共 {len(doc)} 页,开始提取图片...")

total = 0
for page_num in range(len(doc)):
    page = doc[page_num]
    img_list = page.get_images(full=True)
    if not img_list:
        continue
    print(f"  第 {page_num+1} 页发现 {len(img_list)} 张图")
    for idx, img in enumerate(img_list):
        xref = img[0]
        base = doc.extract_image(xref)
        img_bytes = base["image"]
        ext = base["ext"]
        filename = f"page{page_num+1}_{idx+1}.{ext}"
        filepath = os.path.join(output_dir, filename)
        with open(filepath, "wb") as f:
            f.write(img_bytes)
        total += 1
        print(f"     已保存:{filename}")

doc.close()
print(f"✅ 完成!共提取 {total} 张图片,保存在 {output_dir}")

5. 运行脚本

方法一:在脚本所在目录直接运行

python extract.py

方法二:如果提示 'python' 不是内部命令

py extract.py

方法三:使用绝对路径(无论当前在哪个目录都行)

python "D:\你的文件夹\extract.py"
⚠️ 常见报错:如果提示 can't open file '7.py': [Errno 2] No such file or directory,说明当前终端目录与脚本位置不一致。先用 cd 切换到脚本所在目录,再运行。

6. 检查提取结果

打开输出文件夹(./extracted_images),你会看到类似这样的文件:

page1_1.png
page1_2.jpeg
page2_1.png
...

每个文件对应 PDF 中某一页上的一个图片对象(包括:配图、水印、二维码、Logo 等)。

7. 关于“多余图片”(二维码/水印)

提取出来的图片中如果包含二维码、页眉页脚等无关元素,直接手动删除即可,它们不影响后续使用。

如果你想在提取时自动过滤掉小尺寸图片(比如二维码),可以在脚本中加一个尺寸判断:

width = base.get("width", 0)
height = base.get("height", 0)
if width < 200 and height < 200 and abs(width - height) < 50:
    print(f"  ⏭️ 跳过小图标/二维码 ({width}x{height})")
    continue

8. 软考 / 题库场景的下一步

提取出图片后,你只需要把图片文件名填入 CSV 的 配图文件名 列,与题目文本关联起来,就可以驱动你的“自动抽题 + 批改”学习系统了。

附录:常用命令速查

用途命令
查看 Python 版本python --version
检查 PyMuPDF 是否安装python -c "import fitz; print(fitz.__version__)"
安装 PyMuPDFpip install PyMuPDF -i https://pypi.tuna.tsinghua.edu.cn/simple
查看 PDF 页数python -c "import fitz; doc=fitz.open(r'路径'); print(len(doc))"
运行提取脚本python extract.py
解决 python 找不到改用 pypython3

总结:从零搭建一个 PDF 图片提取器,只需 3 条命令 + 1 个脚本。这套流程适用于所有包含配图的 PDF 资料(考试真题、教材、错题本等),是搭建个人自动化学习系统的基础设施之一。

分类: 技术服务 标签: pythonPyMuPDF

评论

14 + 11 = ?
暂无评论数据

暂无评论数据

目录