作品展示
背景需求
最近在做《运用Python优化3-6岁幼儿学习操作材料的实践研究》的课题研究资料(上半学期和下半学期)。
将CSDN里面相关的研究照片文字贴入Word后,就发现一张图片就占了A4竖版一页,太大了。我想把word里面的所有照片的长宽缩小。
设计过程:
1、花了7天时间,每天都在用AI对话大师和百度AI寻找Python代码,但是都没有成功实现图片缩小
2、最后我从百度上搜索到一个非常短的代码,终于实现了图片长宽缩小的需求。
代码展示:
'''
docx内部的图片太大了,需要等比例缩小长宽
作者:
# https://www.5axxw.com/questions/content/keey3a
# https://www.geeksforgeeks.org/working-with-images-python-docx-module/
# https://python-docx.readthedocs.io/en/latest/index.html
AI对话大师写了备注说明时间:2024年4月3日
'''path = r'C:\Users\jg2yXRZ\OneDrive\桌面\06 大课题Python'# 导入docx库。
import docx
# 使用docx.Document()函数打开指定路径的Word文档。
doc = docx.Document(path+r'\1.docx')# 获取文档的页面宽度和左右边距,计算出文本区域的宽度(即去除边距后的实际可用宽度)。
text_width = doc.sections[0].page_width - doc.sections[0].left_margin - doc.sections[0].right_margin# 使用enumerate()函数遍历文档中的内联图片(即插入到文本中的图片)。
for i, image in enumerate(doc.inline_shapes):# 获取每个图片的原始宽度和高度original_width, original_height = image.width, image.height# 根据文本区域的宽度计算新的高度,保持图片的宽高比。new_height = int(original_height * text_width / original_width)# 设置图片的宽度为文本区域的宽度,高度为计算得到的新高度。image.width = text_widthimage.height = new_height
# 使用doc.save()函数保存修改后的文档,指定保存路径。
doc.save(path+r'\2.docx')
# # 保存修改后的文档。
结果展示:
1、直接插入图片后,源文件有162页,一张图片占一页
图片显示不全
有162页!
2、用代码缩小图片长宽后,容量少了5MB
页面稍微少一点,一页显示一张整图(图片整页都显示了,右侧没有遮挡)
129页
分析:此代码是将图片依据竖版宽度进行等比例缩小,确保每张图片都能再一页上被看清楚,有些图片还是一页大小,占页面。
于是我微调了代码,把照片的长宽除以2
代码展示:
'''
docx内部的图片太大了,需要等比例缩小长宽 除以2
作者:
# https://www.5axxw.com/questions/content/keey3a
# https://www.geeksforgeeks.org/working-with-images-python-docx-module/
# https://python-docx.readthedocs.io/en/latest/index.html
AI对话大师写了备注说明时间:2024年4月3日
'''path = r'C:\Users\jg2yXRZ\OneDrive\桌面\06 大课题Python'# 导入docx库。
import docx
# 使用docx.Document()函数打开指定路径的Word文档。
doc = docx.Document(path+r'\1.docx')# 获取文档的页面宽度和左右边距,计算出文本区域的宽度(即去除边距后的实际可用宽度)。
text_width = doc.sections[0].page_width - doc.sections[0].left_margin - doc.sections[0].right_margin# 使用enumerate()函数遍历文档中的内联图片(即插入到文本中的图片)。
for i, image in enumerate(doc.inline_shapes):# 获取每个图片的原始宽度和高度original_width, original_height = image.width, image.height# 根据文本区域的宽度计算新的高度,保持图片的宽高比。new_height = int(original_height * text_width / original_width)# 设置图片的宽度为文本区域的宽度,高度为计算得到的新高度。image.width = int(text_width/2)image.height = int(new_height/2)
# 使用doc.save()函数保存修改后的文档,指定保存路径。
doc.save(path+r'\2.docx')
# # 保存修改后的文档
图片尺寸变化,但图片容量不变
除以2后,照片的长宽变小了,页面少很多
只有69页了,
图片占页宽的一半,基本符合我的需求(一行2列,插入两张照片)
完成了!
现阶段的AI模型还无法覆盖所有的Python编程功能,因此感谢网络大神的无偿分享,帮助我解决迫在眉睫的需求。
有了这个批量调整docx内部照片的代码,就能提高我制作课题阶段资料的速度了,
https://www.5axxw.com/questions/content/keey3ahttps://www.5axxw.com/questions/content/keey3a