victory的博客

长安一片月,万户捣衣声

0%

PIL | 批量压缩图片

批量压缩图片

实现代码:

# 将图片按修改时间排序(这样才能与图片的描述一致),将路径存入列表,以便后面逐个插入图片时调用
import os
from PIL import Image
from docx import Document

path = "6s_pictures"
list_p = [path + "\\" + i for i in os.listdir(path)]  # 获取图片的文件名,并拼接完整路径
list_p.sort(key=lambda path: os.path.getmtime(path))  # 将列表中的文件按其修改时间排序,os.path.getmtime() 函数是获取文件最后修改时间
print(list_p)

# 按比例缩小图片尺寸
for infile in list_p:
    im = Image.open(infile)
    (x, y) = im.size  # 读取图片尺寸(像素)
    x_s = 165  # 定义缩小后的标准宽度
    y_s = int(y * x_s / x)  # 基于标准宽度计算缩小后的高度
    out = im.resize((x_s, y_s), Image.ANTIALIAS)  # 改变尺寸,保持图片高品质
    out.save(r"6s_pictures_new\{}".format(infile.split("\\")[-1]))

path = "6s_pictures_new"
list_p = [path + "\\" + i for i in os.listdir(path)]  # 获取图片的文件名,并拼接完整路径
list_p.sort(key=lambda path: os.path.getmtime(path))  # 将列表中的文件按其修改时间排序,os.path.getmtime() 函数是获取文件最后修改时间

doc = Document("6S稽查问题模板.docx")
table = doc.tables[0]  # 已确定是第一个表格,其索引是0

# 增加需要的行,以便足够填入数据
for i in range(len(list_p) - 1):
    table.add_row()

# 写入数据及图片
for row in range(1, len(list_p) + 1):
    # 插入图片
    run = table.cell(row, 2).paragraphs[0].add_run()  # 新增一个文字块
    picture = run.add_picture(list_p[row - 1])  # 插入图片

doc.save("6S稽查问题.docx")

6s_pictures
6S稽查问题模板.docx