【办公类-47-01】20240404 Word内部照片批量缩小长宽(课题资料系列)

作品展示

06a7df90ac6448509e39d4cc831cc19d.png

背景需求

最近在做《运用Python优化3-6岁幼儿学习操作材料的实践研究》的课题研究资料(上半学期和下半学期)。

将CSDN里面相关的研究照片文字贴入Word后,就发现一张图片就占了A4竖版一页,太大了。我想把word里面的所有照片的长宽缩小。

8c661d375dcc4b21997bd55de6205c86.png

 

设计过程:

1、花了7天时间,每天都在用AI对话大师和百度AI寻找Python代码,但是都没有成功实现图片缩小

149318e326da4e1fb6dba6552a33fedc.pngf7135e6a3a1843f2972c14e03c6bb822.png2、最后我从百度上搜索到一个非常短的代码,终于实现了图片长宽缩小的需求。

35247076cbde4ea2bf655b39fbd22abd.png

代码展示:



'''
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_width
    image.height = new_height
# 使用doc.save()函数保存修改后的文档,指定保存路径。
doc.save(path+r'\2.docx')
# # 保存修改后的文档

。


结果展示:

1、直接插入图片后,源文件有162页,一张图片占一页

3c0b1d6cd2cb42d1a6b51ed4d890b130.png

8c661d375dcc4b21997bd55de6205c86.png

图片显示不全

0aec3cabbf204e92969b49bb5f643d58.png

有162页!7a75bc3be8d446fea00a20390a591c91.png

2、用代码缩小图片长宽后,容量少了5MB

a3d837319a244ec491959e9a8bf3bb7b.png

页面稍微少一点,一页显示一张整图(图片整页都显示了,右侧没有遮挡)

4d1a3248b30d460698a6a72fe4a4b756.png

129页

69b0acfaf92847139599e696d9a0e7b9.png

分析:此代码是将图片依据竖版宽度进行等比例缩小,确保每张图片都能再一页上被看清楚,有些图片还是一页大小,占页面。

 

 

于是我微调了代码,把照片的长宽除以2

1cd691046f2a451092d3f9c945dd0fb3.png

代码展示:



'''
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')
# # 保存修改后的文档



图片尺寸变化,但图片容量不变

e7686af4a014481bbf530c12e80c00b9.png

除以2后,照片的长宽变小了,页面少很多

06a7df90ac6448509e39d4cc831cc19d.pngb7badf2b7b7a477a9d7ad4751cc600ba.png

只有69页了,

1aeab5d9fa3e4fd893e79e0ad95d810f.png

图片占页宽的一半,基本符合我的需求(一行2列,插入两张照片)

d2693d368a21433b9e32b3d9162e3c55.png

 

完成了!

现阶段的AI模型还无法覆盖所有的Python编程功能,因此感谢网络大神的无偿分享,帮助我解决迫在眉睫的需求。

有了这个批量调整docx内部照片的代码,就能提高我制作课题阶段资料的速度了,

https://www.5axxw.com/questions/content/keey3ahttps://www.5axxw.com/questions/content/keey3a

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿夏reasonsummer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值