体验一下
这份Python脚本旨在处理给定的DOCX(Word文档)文件中的图片,将其按照指定的比例进行缩小,并生成一个新的压缩版DOCX文件,其中包含经过缩小处理的图片。
导入必要的库
zipfile
:用于处理ZIP文件PIL
中的Image
:用于处理图像os
:用于与操作系统进行交互(文件路径等)定义函数:
resize_image(image_path, scale_percent)
: 缩放单张图片的函数。resize_images_in_docx(input_docx, scale_percent)
: 处理整个DOCX文件中的图片,包括解压缩、缩放和生成压缩版DOCX。代码执行步骤:
resize_image(image_path, scale_percent)
这个函数用于对单张图片进行缩小处理。接受两个参数:
image_path
:图片文件路径。scale_percent
:缩放比例。函数内部逻辑:
Image.open()
打开指定路径的图像文件。resize()
方法将图像按比例缩小。resize_images_in_docx(input_docx, scale_percent)
这个函数是核心部分,用于处理整个DOCX文件中的图片。接受两个参数:
input_docx
:输入的DOCX文件路径。scale_percent
:缩放比例。函数内部逻辑:
save()
方法保存缩小后的图片。在调用代码时:
resize_images_in_docx()
函数执行以下步骤:
import zipfile
from PIL import Image
import os
def resize_image(image_path, scale_percent):
image = Image.open(image_path)
width, height = image.size
new_width = int(width * scale_percent / 100)
new_height = int(height * scale_percent / 100)
resized_image = image.resize((new_width, new_height))
return resized_image
def resize_images_in_docx(input_docx, scale_percent):
# 获取输入DOCX文件所在目录和文件名
input_directory = os.path.dirname(input_docx)
file_name = os.path.splitext(os.path.basename(input_docx))[0]
# 解压缩 DOCX 文件到其所在目录下同名文件夹
output_directory = os.path.join(input_directory, file_name)
with zipfile.ZipFile(input_docx, 'r') as zip_ref:
zip_ref.extractall(output_directory)
# 缩小图片并替换原始图片文件
for root, _, files in os.walk(output_directory):
for file in files:
file_path = os.path.join(root, file)
if os.path.isfile(file_path):
# 如果是图片文件,则缩小并保存
if any(file_path.lower().endswith(img_ext) for img_ext in ['.jpg', '.jpeg', '.png', '.gif']):
resized_image = resize_image(file_path, scale_percent)
resized_image.save(file_path)
# 创建一个新的 ZIP 文件(将同名文件夹下的所有文件压缩起来)
zipf = zipfile.ZipFile(f'{file_name}_压缩版.docx', 'w', zipfile.ZIP_DEFLATED)
for root, _, files in os.walk(output_directory):
for file in files:
file_path = os.path.join(root, file)
arc_path = os.path.relpath(file_path, output_directory)
zipf.write(file_path, arcname=arc_path)
zipf.close()
# 调用函数
input_docx_file = 'input.docx' # 输入文件名
scale_percent = 50 # 缩放比例(50%)
resize_images_in_docx(input_docx_file, scale_percent)