首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

掌握这6种方法,Python提取Word图片轻轻松松,手拿把掐!

1、使用内置模块zipfile提取

1.1 读取Word文件结构

我们需要先将.docx文件视为一种特殊的zip存档,因为.docx文件本质上是XML和其他资源(如图片)的集合,压缩在一个zip文件中。通过Python的内置zipfile模块,我们可以访问这些资源。

import zipfile

import os

def extract_images_from_word(docx_path, output_folder):

# 解压.docx文件

with zipfile.ZipFile(docx_path, 'r') as docx_zip:

# 遍历解压后的文件列表,查找图片

for filename in docx_zip.namelist():

if filename.endswith(('.jpg', '.jpeg', '.png', '.gif')):

# 临时保存图片文件

with docx_zip.open(filename) as img_file, open(os.path.join(output_folder, filename.replace('/', '_')), 'wb') as img_out:

img_out.write(img_file.read())1.2 提取并保存图片

docx_path = 'C:/Users/xxxx/Desktop/xxxxx.docx'

extract_images_from_word(docx_path, './output')

上述代码片段展示了如何利用zipfile解压.docx文件 ,识别其中的图片文件(常见格式如.jpg,.jpeg,.png,.gif),并将它们保存到指定的输出文件夹。

2、使用Python-docx库操作

2.1 安装与导入

为了从Word文档中提取图片,我们可以利用python-docx库,它提供了丰富的API来操作.docx文件。首先 ,确保你的环境中安装了此库。如果尚未安装 ,可以通过pip命令轻松安装:

pip install python-docx

接下来,在你的Python脚本中导入必要的模块:

from docx import Document2.2 遍历Word文档图片

使用python-docx,你可以打开一个Word文档并遍历其中的段落与表格 ,查找包含图片的元素。图片通常存储在InlineShape对象中,可通过访问段落或表格单元格的属性来获取。

def extract_images(document_path):

document = Document(document_path)

for paragraph in document.paragraphs:

for inline_shape in paragraph.inline_shapes:

if inline_shape.type == inline_shape.PICTURE:

yield inline_shape

for table in document.tables:

for row in table.rows:

for cell in row.cells:

for inline_shape in cell.inline_shapes:

if inline_shape.type == inline_shape.PICTURE:

yield inline_shape2.3 图片提取实现

提取图片的具体实现包括保存图片到本地文件系统。以下代码展示了如何将找到的图片保存为.png格式:

现在,结合上述两个函数,你可以从指定的Word文档中提取所有图片:

document_path = 'example.docx'

output_folder = 'extracted_images'

# 提取文档中的图片

shapes = extract_images(document_path)

# 保存图片

save_extracted_images(shapes, output_folder)

通过这段代码,Word文档中的每张图片都会被逐个提取并保存到指定的output_folder目录下 ,每个图片文件名按照提取顺序编号命名。

3、使用COM接口自动化 🤖

3.1 Python调用Word COM

利用Python调用Word的COM接口是一种强大的方式来操作Word文档,包括提取图片。这需要你的系统上安装有Microsoft Word。通过pywin32库,可以实现与Word的交互。首先 ,确保安装pywin32:

pip install pywin32

接着 ,通过以下代码实例展示如何启动Word应用程序并准备提取图片:

import os

import win32com.client

# 初始化Word应用程序

word = win32com.client.Dispatch("Word.Application")

word.Visible = False  # 设置为False ,不显示Word界面

# 打开文档

doc_path = 'example.docx'

doc = word.Documents.Open(doc_path)3.2 批量导出图片

利用Word的COM接口遍历文档中的图片,并逐一导出。以下代码演示了这一过程:

def export_images_via_com(doc, output_folder):

if not os.path.exists(output_folder):

os.makedirs(output_folder)

# 遍历文档中的每个形状 ,查找图片

for shape in doc.InlineShapes:

if shape.Type == 3:  # 图片类型标识

image_path = os.path.join(output_folder, f'image_{shape.Id}.png')

shape.Range.Export(filename=image_path, filter='PNG')

doc.Close(True)  # 关闭文档 ,不提示保存更改

word.Quit()  # 退出Word应用

# 调用函数导出图片

export_images_via_com(doc, 'extracted_images_com')

这段代码会遍历Word文档中的所有图片(InlineShapes),判断它们是否为图片类型(类型标识为3) ,然后导出为PNG格式至指定的output_folder目录下。请注意,图片的命名规则是基于其在文档中的ID,确保了每个图片的唯一性。

通过上述方法 ,你可以利用Python和Word的COM接口高效地批量提取Word文档中的图片。这种方式特别适用于需要深入Word文档内部结构进行操作的场景。

4、使用extract_images_from_docx模块

4.1 模块安装步骤

extract_images_from_docx是一个专门设计用于从.docx文件中提取图片的Python模块,它简化了图片提取过程。首先 ,你需要通过pip安装这个模块:

pip install extract_images_from_docx4.2 快速提取图片示例

一旦安装完成,使用extract_images_from_docx模块来提取Word文档中的图片变得非常直接。以下是一个简单的代码示例 ,展示了如何快速实现图片提取功能:

from extract_images_from_docx import extract_images

# 指定Word文档路径

doc_path = 'example.docx'

# 指定图片提取后的保存目录

output_folder = 'extracted_images_module'

# 使用函数提取图片

images_extracted = extract_images(doc_path, output_folder)

print(f'成功提取了{len(images_extracted)}张图片到"{output_folder}"目录下。')

这段代码首先导入了extract_images函数,然后指定了待处理的Word文档路径以及图片提取后的存放目录。调用该函数后,文档中的所有图片会被自动提取并保存到指定目录 ,同时打印出成功提取的图片数量。

通过extract_images_from_docx模块 ,即便是复杂的Word文档结构也不再成为图片提取的障碍,它以简洁的接口封装了底层细节,让开发者能够高效地完成任务。

5、使用PyMuPDF(fitz)高级操作

5.1 fitz库简介与安装

PyMuPDF(也称为fitz)是一个功能强大的PDF与文档处理库,它支持包括Word在内的多种文档格式。PyMuPDF以其高效的性能和丰富的功能集而著称,能够轻松解析文档并提取其中的图片。要开始使用 ,首先确保通过pip安装PyMuPDF:

pip install pymupdf5.2 解析Word提取图像

使用PyMuPDF从Word文档中提取图片相当直接。以下代码示例展示了如何实现这一功能:

import os

import fitz  # PyMuPDF

def extract_images_with_fitz(doc_path, output_folder):

if not os.path.exists(output_folder):

os.makedirs(output_folder)

# 打开文档

doc = fitz.open(doc_path)

for page_num in range(len(doc)):

page = doc.load_page(page_num)

# 获取页面上的所有图片

images = page.get_images(full=True)

for img_index, img_info in enumerate(images):

# 提取图片数据

base_image = doc.extract_image(img_info[0])

image_bytes = base_image["image"]

# 保存图片

image_path = os.path.join(output_folder, f'image_{page_num}_{img_index}.png')

with open(image_path, 'wb') as img_file:

img_file.write(image_bytes)

doc.close()

# 指定Word文档路径和输出目录

doc_path = 'example.docx'

output_folder = 'extracted_images_fitz'

extract_images_with_fitz(doc_path, output_folder)

这段代码首先打开了指定的Word文档,并对每一页进行遍历。通过get_images(full=True)方法获取页面上的所有图片信息,随后利用extract_image()方法提取图片数据,并将其保存为PNG格式到指定的输出目录。这种方法的优势在于它能够处理嵌入在文档中的各种图像,并且执行效率高,非常适合处理大型文档。

6、使用Aspose.Words for Python

6.1 引入第三方强援

Aspose.Words for Python 是一款功能强大的库,专为处理Word文档而设计,支持无需Microsoft Word安装即可创建、修改及转换Word文档。它在图片提取方面提供了高度精准的控制 ,特别适合于需要高级特性和企业级解决方案的场景。安装Aspose.Words可通过pip命令完成:

pip install aspose-words6.2 精准图片提取流程

使用Aspose.Words提取Word文档中的图片 ,步骤直接且高效。下面的代码展示了如何实现这一功能:

from aspose.words import Document

import os

def extract_images_aspose(doc_path, output_folder):

doc = Document(doc_path)

if not os.path.exists(output_folder):

os.makedirs(output_folder)

for i, img in enumerate(doc.get_child_nodes(NodeType.PICTURE, True)):

image_stream = img.image_data

filename = os.path.join(output_folder, f'image_{i+1}.png')

with open(filename, 'wb') as file:

file.write(image_stream)

doc_path = 'sample.docx'

output_folder = 'aspose_extracted_images'

extract_images_aspose(doc_path, output_folder)

这段代码首先加载Word文档,然后遍历文档中所有的图片节点(通过NodeType.PICTURE定位),并将图片数据写入到指定的输出文件夹中,每个图片文件按序号命名。

6.3 性能与兼容性考量

Aspose.Words的优势在于其广泛的支持性和高度的兼容性 ,能够处理各种版本的Word文档格式,包括DOC、DOCX等 ,且不受操作系统限制,无论是Windows、Linux还是Mac OS都能稳定运行。性能方面 ,它针对批量处理进行了优化,适合大规模文档处理任务 ,但需要注意的是 ,由于其丰富的功能和高质量的输出,资源消耗相比一些轻量级库可能会更高。

选择Aspose.Words作为图片提取解决方案时 ,考虑到它无需依赖Microsoft Office环境 ,提供了全面的文档处理API ,以及对复杂文档结构的优秀处理能力,对于追求高性能和高兼容性的项目而言 ,是值得信赖的选择。

7、总结

在自动化办公领域,Python以其强大的库支持和灵活性,成为处理文档的利器。本文介绍了六种使用Python提取Word文档中图片的方法,包括利用内置的zipfile模块、Python-docx库、COM接口、extract_images_from_docx模块、PyMuPDF(fitz)以及Aspose.Words for Python。每种方法都针对不同的使用场景和需求,从简单的文件结构读取到专业的跨平台处理,为开发者提供了丰富的选择。无论是基础的图片提取,还是需要深入文档结构的复杂操作,Python都能提供高效的解决方案。本文还对各种方法进行了比较,帮助读者根据自身需求选择最合适的工具,让文档中的图片提取变得简单而高效。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OuIDYqLV8cPySfSCE_Ks5AJw0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券