????????使用word中提取的方式图片会丢失清晰度,使用python写一个脚本,程序运行将弹出对话框选择一个word文件,然后在弹出一个对话框选择一个文件夹保存word中的文件。将该word中的所有图片都保存成png格式,并命名成image_i的样式。
程序运行步骤如下图所示:
代码:
其中,save_images_from_word函数介绍如下:
python-docx
库打开给定的Word文档,并将其内容存储在doc
对象中。for i, rel in enumerate(doc.part.rels.values()):
:遍历文档中的所有关系。每一个关系rel
都代表文档中的一个链接或嵌入的对象。通过enumerate
函数,我们可以同时获得关系的索引i
和关系对象本身。if "image" in rel.reltype:
:rel.reltype
是一个字符串,表示关系的类型。如果这个字符串中包含"image",则表示这是一个图片关系。image_bytes = rel.target_part.blob
:rel.target_part.blob
表示图片的原始二进制数据。with open(os.path.join(output_folder, f"image_{i}.png"), "wb") as f:
:os.path.join
函数构造保存图片的完整路径。这里使用了格式化字符串(f-string),将关系索引转换为"image_{i}.png"这样的文件名。例如,如果索引是0,则文件名为"image_0.png"。f.write(image_bytes)
:##########################################
#选择一个word文件,在选择一个路径
#程序将所有word中的图片保存成png格式,
#并且命名为image_i
from tkinter import Tk, filedialog
from docx import Document
import os
import io
#from docx.shapes.picture import Picture
from PIL import Image
def save_images_from_word(docx_file, output_folder):
doc = Document(docx_file)
for i, rel in enumerate(doc.part.rels.values()):
if "image" in rel.reltype:
image_bytes = rel.target_part.blob
with open(os.path.join(output_folder, f"image_{i}.png"), "wb") as f:
f.write(image_bytes)
def select_file():
root = Tk()
root.withdraw()
file_path = filedialog.askopenfilename(filetypes=[("Word files", "*.docx")])
return file_path
def select_output_folder():
root = Tk()
root.withdraw()
output_folder = filedialog.askdirectory()
return output_folder
# 选择Word文件
file_path = select_file()
if file_path:
# 选择输出文件夹
output_folder = select_output_folder()
if output_folder:
# 保存图片到输出文件夹
save_images_from_word(file_path, output_folder)