AI开发-python-langchain框架(3-7-提取pdf中的图片 )

高效提取 PDF 中的所有图片:一键批量导出,无损保存超实用!

在日常处理 PDF 文档时,我们经常会遇到需要提取 PDF 内图片的场景:整理文档中的图表、保存白皮书里的高清插图、提取报告中的数据配图、收集课件里的关键图片...... 手动截图不仅模糊、效率极低,还会丢失原图分辨率,有没有更高效、无损的解决方案?
今天给大家分享一个超实用的 PDF 图片批量提取方法,无需安装笨重的专业软件 ,一键即可提取 PDF 中所有页面的图片,原图无损导出、自动按页码分类、支持任意 PDF 格式,完美解决各类 PDF 图片提取需求!

一、适用场景全覆盖

这个方法能轻松应对绝大多数工作、学习中的 PDF 图片提取需求:

  1. 文档整理:提取 PDF 报告、白皮书、合同中的插图、图表、logo 等素材;
  2. 学习办公:导出课件、教材、论文里的高清图片,方便二次编辑使用;
  3. 素材收集:批量保存 PDF 画册、说明书、手册中的图片资源;
  4. 高效处理:几十页、上百页的 PDF,几秒内完成所有图片提取,告别手动操作。

二、核心优势:简单、高效、无损

相比截图、在线工具等传统方式,这个方案的优势非常突出:✅ 无损提取 :直接提取 PDF 内嵌的原始图片,分辨率 100% 保留,无压缩、无模糊;✅ 批量处理 :自动遍历 PDF 每一页,一次性提取所有图片,无需逐页操作;✅ 智能命名 :图片文件自动按「页码 + 序号」命名,清晰对应原 PDF 位置,方便查找;✅ 自动归档 :自动创建专属文件夹,所有提取的图片统一保存,整洁有序;✅ 格式兼容 :支持 PNG、JPG、JPEG 等所有常见图片格式,无需额外转换;✅ 轻量无依赖:本地运行,无需上传文件到第三方平台,保护文档隐私安全。

三、实现方式:极简高效,零基础可上手

整个实现基于轻量的 PDF 处理工具,核心逻辑简洁清晰,全程无需复杂配置:

  1. 环境准备:仅需安装一个轻量的 PDF 处理依赖库,占用空间极小,安装秒完成;
  2. 路径配置:只需指定需要处理的 PDF 文件路径,无需修改其他参数;
  3. 自动执行:运行后工具会自动打开 PDF,逐页扫描识别内嵌图片;
  4. 批量导出:自动提取每一张图片的原始数据,按规则命名并保存到指定文件夹;
  5. 结果反馈:实时显示提取进度,最终统计总图片数量,清晰直观。

整个过程无需编写复杂代码、无需理解专业原理,三步即可完成:准备环境→指定文件→执行导出,零基础用户也能轻松上手。

四、实际效果展示

  • 运行后自动创建pdf_images文件夹,所有图片规整存放;
  • 文件名格式:page页码_img序号.格式,一眼就能找到对应页面的图片;
  • 无论 PDF 有多少页、多少张图片,都能快速完成提取,大文件也不卡顿;
  • 导出的图片和 PDF 中原图完全一致,可直接用于编辑、打印、展示。

五、总结

这款 PDF 图片提取方案,完美解决了日常办公学习中批量、无损、高效提取 PDF 图片的痛点,摒弃了截图的模糊和在线工具的隐私风险,本地运行、自动处理、结果清晰。
无论是少量图片提取,还是大批量文档处理,都能轻松胜任,是提升工作学习效率的实用小工具,强烈推荐大家收藏使用!
实现代码:

复制代码
#pip install pymupdf

import fitz
import os

# 创建保存图片的文件夹
if not os.path.exists("pdf_images"):
    os.mkdir("pdf_images")

# 打开 PDF
pdf_path = "./txt/图平台白皮书.pdf"
pdf = fitz.open(pdf_path)

# 统计
total_images = 0

# 遍历每一页
for page_index in range(len(pdf)):
    current_page = page_index + 1  # 真实页码(从1开始)
    page = pdf[page_index]
    image_list = page.get_images(full=True)

    # 如果本页有图片,先输出提示
    if image_list:
        print(f"\n📄 第 {current_page} 页 找到 {len(image_list)} 张图片")

    # 遍历当前页的所有图片
    for img_index, img in enumerate(image_list, 1):
        xref = img[0]
        base_image = pdf.extract_image(xref)
        image_bytes = base_image["image"]
        image_ext = base_image["ext"]

        # 保存图片(文件名自带页码)
        image_path = f"pdf_images/page{current_page}_img{img_index}.{image_ext}"
        with open(image_path, "wb") as f:
            f.write(image_bytes)

        # 输出每张图片的位置
        print(f"  ✅ 已保存:第 {current_page} 页 第 {img_index} 张图片 → {image_path}")
        total_images += 1

print(f"\n🎉 提取完成!总共提取:{total_images} 张图片")
print(f"📁 所有图片保存在:pdf_images 文件夹")

结果输出:

📄 第 1 页 找到 1 张图片

✅ 已保存:第 1 页 第 1 张图片 → pdf_images/page1_img1.png

📄 第 4 页 找到 1 张图片

✅ 已保存:第 4 页 第 1 张图片 → pdf_images/page4_img1.jpeg

📄 第 6 页 找到 10 张图片

✅ 已保存:第 6 页 第 1 张图片 → pdf_images/page6_img1.jpeg

✅ 已保存:第 6 页 第 2 张图片 → pdf_images/page6_img2.jpeg

✅ 已保存:第 6 页 第 3 张图片 → pdf_images/page6_img3.jpeg

✅ 已保存:第 6 页 第 4 张图片 → pdf_images/page6_img4.jpeg

✅ 已保存:第 6 页 第 5 张图片 → pdf_images/page6_img5.jpeg

✅ 已保存:第 6 页 第 6 张图片 → pdf_images/page6_img6.jpeg

✅ 已保存:第 6 页 第 7 张图片 → pdf_images/page6_img7.jpeg

✅ 已保存:第 6 页 第 8 张图片 → pdf_images/page6_img8.jpeg

✅ 已保存:第 6 页 第 9 张图片 → pdf_images/page6_img9.jpeg

✅ 已保存:第 6 页 第 10 张图片 → pdf_images/page6_img10.jpeg

📄 第 7 页 找到 2 张图片

✅ 已保存:第 7 页 第 1 张图片 → pdf_images/page7_img1.png

✅ 已保存:第 7 页 第 2 张图片 → pdf_images/page7_img2.png

📄 第 8 页 找到 1 张图片

✅ 已保存:第 8 页 第 1 张图片 → pdf_images/page8_img1.jpeg

📄 第 10 页 找到 1 张图片

✅ 已保存:第 10 页 第 1 张图片 → pdf_images/page10_img1.jpeg

📄 第 13 页 找到 1 张图片

✅ 已保存:第 13 页 第 1 张图片 → pdf_images/page13_img1.jpeg

📄 第 14 页 找到 1 张图片

✅ 已保存:第 14 页 第 1 张图片 → pdf_images/page14_img1.jpeg

......

图片存储情况路径:

更多学习资料尽在 老虎网盘资源