首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >如何使用 Python 从 Word 文档中提取图片

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

原创
作者头像
用户12416476
发布2026-09-04 20:07:38
发布2026-09-04 20:07:38
30
举报

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

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

准备工作

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

代码语言:javascript
复制
pip install Spire.Doc

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

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

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

代码语言:javascript
复制
import queue
from spire.doc import *
from spire.doc.common import *

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

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

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

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

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

代码语言:javascript
复制
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 中提取的图片

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

代码语言:javascript
复制
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 张图片,输出目录可能如下:

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

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

下面是完整示例:

代码语言:javascript
复制
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​​ 文件。

例如:

代码语言:javascript
复制
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 文档的自动化流程。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 准备工作
  • 步骤 1:使用 Python 加载 Word 文档
  • 步骤 2:查找 Word 文档中的图片
  • 步骤 3:保存从 Word 中提取的图片
  • 使用 Python 从 Word 中提取图片的完整代码
  • 使用 Python 批量提取多个 Word 文档中的图片
  • 从 Word 中提取图片时需要注意的问题
  • 总结
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档