You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python修改docx文档中的所有图片

修改docx内所有图片的实现方法

docx文件本质是ZIP格式的压缩归档,你现有代码仅完成了图片提取和修改操作,缺少将修改后的图片回写到docx压缩包的步骤,补充对应逻辑即可实现直接修改docx内的图片,无需额外导出文件。

以下是调整后的完整可运行代码,全程在内存中处理文件,不会生成临时缓存文件:

import zipfile
import os
from io import BytesIO
from PIL import Image, ImageDraw

def change_img(image_stream):
    image = Image.open(image_stream)
    draw = ImageDraw.Draw(image)
    pix = image.load()
    # 遍历所有像素转灰度
    for i in range(image.size[0]):
        for j in range(image.size[1]):
            gray = sum(pix[i, j][:3]) // 3
            draw.point((i, j), (gray, gray, gray))
    # 将修改后的图片写入字节流返回
    output_stream = BytesIO()
    image.save(output_stream, format=image.format)
    output_stream.seek(0)
    return output_stream

# 配置文件路径
original_docx_path = "document.docx"
temp_docx_path = "temp_output.docx"

# 读写压缩包完成图片替换
with zipfile.ZipFile(original_docx_path, 'r') as original_zip, zipfile.ZipFile(temp_docx_path, 'w') as temp_zip:
    for file_item in original_zip.filelist:
        if file_item.filename.startswith('word/media/'):
            # 读取原图片修改后写入临时压缩包
            img_content = BytesIO(original_zip.read(file_item.filename))
            modified_img = change_img(img_content)
            temp_zip.writestr(file_item.filename, modified_img.read())
        else:
            # 非图片文件直接原封不动复制
            temp_zip.writestr(file_item, original_zip.read(file_item.filename))

# 用修改后的文件替换原文件(可注释掉该行保留原文件)
os.replace(temp_docx_path, original_docx_path)

注意事项

  • 操作前请备份原docx文件,避免修改错误导致文件损坏
  • 运行前需安装pillow依赖,执行命令:pip install pillow
  • 代码默认将所有图片转灰度,可根据需求修改change_img函数内的图片处理逻辑

内容的提问来源于stack exchange,提问作者bekishev04

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 11:39:01