如何使用 Python 从 Word 文档中提取图片

Word 文档中经常包含截图、产品图片、示意图、Logo 等嵌入图片。如果文档中的图片较多,逐张在 Microsoft Word 中另存会比较麻烦。

本文介绍如何使用 Python 从 Word 文档中批量提取图片,并将其保存为独立的图片文件。

准备工作

确保电脑上已安装 Python,然后通过 pip 安装所需库:

复制代码
pip install Spire.Doc

步骤 1:使用 Python 加载 Word 文档

下面的示例使用 Spire.Doc for Python 读取 DOC 或 DOCX 文件。

首先导入所需模块并加载 Word 文档:

复制代码
import queue
from spire.doc import *
from spire.doc.common import *

doc = Document()
doc.LoadFromFile("Sample.docx")

文档加载完成后,就可以遍历其中的对象并查找图片。

步骤 2:查找 Word 文档中的图片

Word 文档中的普通嵌入图片通常以 DocPicture 对象表示。

由于图片可能位于不同层级的文档对象中,可以使用队列遍历文档结构,并查找类型为 DocumentObjectType.Picture 的对象:

复制代码
nodes = queue.Queue()
nodes.put(doc)

images = []

while not nodes.empty():
    node = nodes.get()

    for i in range(node.ChildObjects.Count):
        child = node.ChildObjects.get_Item(i)

        if child.DocumentObjectType == DocumentObjectType.Picture:
            picture = child if isinstance(child, DocPicture) else None

            if picture is not None:
                images.append(picture.ImageBytes)

        elif isinstance(child, ICompositeObject):
            nodes.put(child)

找到图片后,通过 ImageBytes 属性获取图片的二进制数据,并将其保存到 images 列表中。

步骤 3:保存从 Word 中提取的图片

获取图片数据后,可以将每张图片分别写入文件:

复制代码
import os

output_folder = "ExtractedImages"
os.makedirs(output_folder, exist_ok=True)

for i, image_data in enumerate(images, start=1):
    output_path = os.path.join(
        output_folder,
        f"Image-{i}.png"
    )

    with open(output_path, "wb") as image_file:
        image_file.write(image_data)

如果文档中包含 3 张图片,输出目录可能如下:

复制代码
ExtractedImages/
├── Image-1.png
├── Image-2.png
└── Image-3.png

使用 Python 从 Word 中提取图片的完整代码

下面是完整示例:

复制代码
import os
import queue
from spire.doc import *
from spire.doc.common import *

input_file = "Sample.docx"
output_folder = "ExtractedImages"

os.makedirs(output_folder, exist_ok=True)

# 加载 Word 文档
doc = Document()
doc.LoadFromFile(input_file)

# 遍历文档对象
nodes = queue.Queue()
nodes.put(doc)

images = []

while not nodes.empty():
    node = nodes.get()

    for i in range(node.ChildObjects.Count):
        child = node.ChildObjects.get_Item(i)

        # 获取文档中的嵌入图片
        if child.DocumentObjectType == DocumentObjectType.Picture:
            picture = child if isinstance(child, DocPicture) else None

            if picture is not None:
                images.append(picture.ImageBytes)

        # 继续遍历嵌套对象
        elif isinstance(child, ICompositeObject):
            nodes.put(child)

# 保存提取出的图片
for i, image_data in enumerate(images, start=1):
    output_path = os.path.join(
        output_folder,
        f"Image-{i}.png"
    )

    with open(output_path, "wb") as image_file:
        image_file.write(image_data)

doc.Close()

运行代码后,程序会遍历 Word 文档,查找其中的嵌入图片,并将图片保存到 ExtractedImages 文件夹。

使用 Python 批量提取多个 Word 文档中的图片

如果需要处理多个 Word 文件,可以将提取逻辑封装到函数中,然后遍历文件夹内的 .docx 文件。

例如:

复制代码
for filename in os.listdir("WordFiles"):
    if filename.lower().endswith(".docx"):
        input_path = os.path.join("WordFiles", filename)

        # 对每个 Word 文档执行图片提取操作

批量处理时,建议为每个源文档创建独立的输出文件夹,避免不同文档中提取出的图片因文件名相同而被覆盖。

从 Word 中提取图片时需要注意的问题

  • 上面的示例提取的是以 DocPicture 对象表示的图片。

  • 图表、SmartArt、形状、OLE 对象等图形元素可能使用不同的 Word 对象类型,因此不一定会被这段代码提取。

  • 示例直接将图片数据保存为 .png 文件。如果需要保留图片原始格式,应先判断源图片的实际格式,再决定输出文件扩展名。

  • 文档处理完成后,应调用 Close() 释放相关资源。

总结

当 Word 文档中包含大量图片时,使用 Python 自动提取会比手动逐张另存更加方便。

通过遍历文档对象、查找 DocPicture 并读取其 ImageBytes 数据,可以将 Word 中的嵌入图片批量保存为独立文件,也可以进一步扩展为批量处理多个 DOCX 文档的自动化流程。

相关推荐
2601_962097361 小时前
Pathway 实时RAG新方案:抛弃Spark、Flink,生产级数据管道
python·流处理·大数据集群·实时rag·pathway
三十岁老牛再出发1 小时前
9月3日总结
python
2601_962299881 小时前
Linux下运行Python脚本
linux·python·ubuntu·脚本·命令
IT毕设实战小研1 小时前
基于大数据的DAX40成分股金融新闻情感趋势可视化分析
android·大数据·python·考研·金融·课程设计
三十岁老牛再出发1 小时前
8月27日总结
python·pandas
砚底藏山河1 小时前
【量化纯GET实战 #21】用 pandas 做分析:把接口数据变成 DataFrame
java·python·金融·maven·pandas
Carl_奕然2 小时前
【智能体】Agent的四种设计模式之:React(2026最新版)
javascript·人工智能·python·react.js·设计模式·语言模型
岁月宁静2 小时前
四、《从零手撸 Agent》 — 流式输出:接住 AI “一个字一个字” 想出来的过程
python·agent
是吕先森2 小时前
【python】selenium实现web自动化测试
前端·python·selenium