Py安装PyMuPDF裁剪整本书为图片
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 --version2. 安装 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})")
continue8. 软考 / 题库场景的下一步
提取出图片后,你只需要把图片文件名填入 CSV 的 配图文件名 列,与题目文本关联起来,就可以驱动你的“自动抽题 + 批改”学习系统了。
附录:常用命令速查
| 用途 | 命令 |
|---|---|
| 查看 Python 版本 | python --version |
| 检查 PyMuPDF 是否安装 | python -c "import fitz; print(fitz.__version__)" |
| 安装 PyMuPDF | pip 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 找不到 | 改用 py 或 python3 |
总结:从零搭建一个 PDF 图片提取器,只需 3 条命令 + 1 个脚本。这套流程适用于所有包含配图的 PDF 资料(考试真题、教材、错题本等),是搭建个人自动化学习系统的基础设施之一。
版权申明
本文系作者 @hustgongjun 原创发布在瑜龙共舞站点。未经许可,禁止转载。
暂无评论数据