在WORD软件中,图片大小一般可以采用点击图片,在“格式”菜单中“大小”里设置图片的高度和宽度,也可以通过鼠标右键菜单“大小”菜单调出设置图片大小的界面,见下图。而在python-docx包中主要使用inline_shape对象的height和width属性设置,笔记将分图像大小设置和图片对齐方式设置等2个方面进行叙述并制作了思维导图。
WORD软件设置图片大小 默认图像大小
使用add_picture()方法可以添加图片,具体用法可以参考文章python-docx图像的添加与删除。在添加图片时可以不指定图片高度和宽度,这时图片默认是原图大小。例如,新建来一个docx文档并添加一个图片代码如下:
document = Document() # 新建docx文档document.add_picture('111.jpg') # 插入111.jpg图片不指定图片大小document.save('test.docx') # 保存文档添加图片默认大小见下图
图片默认大小效果图 设置图片大小为固定值
设置图片大小时可以设置固定值,不过要使用单位转换,例如,可以设置为4厘米。一般要先导入docx.shared包中对 Cm,Inche等,然后赋值给inline_shape.height和inline_shape.width属性。代码如下
inline_shape = document.add_picture('111.jpg') # 插入111.jpg图片,并获取形状对象inline_shape.height = Cm(4) # 设置图片高度为4cminline_shape.width = Cm(4) # 设置图片宽度为4cm设置图像大小为4cm效果如下
图片大小设置4cm效果图 按照比例设置图片
在设置图片之前,首先要清楚inline_shape.height和inline_shape.width属性的数据类型和含义,执行以下代码:
document = Document('test.docx') # 读取test.docxprint('原始图像和当前图像的高度', document.inline_shapes[0].height, document.inline_shapes[1].height) # 打印原始图片大小print('当前图像和原始图像的高度比值', document.inline_shapes[1].height / document.inline_shapes[0].height) # 打印当前图片高度比例print('当前图像和原始图像的宽度比值', document.inline_shapes[1].width / document.inline_shapes[0].width) # 打印当前图片宽度比例运行结果见下图
读取图像大小结果图 可见图像高度和宽度是int类型。text.docx中第2个图片中高度比例和宽度都是当前图像值与原始图像值的比值。所以,按照比例设置图片大小也就是将原始图片宽度和高度与比例相乘得到当前图像的大小,最后转换成int类型。在text.docx文件中第2段添加图片,图片大小比例与上图相同。那么新插入的图片是否和第2个图像相同?见如下代码:
inline_shape = document.paragraphs[1].add_run().add_picture('111.jpg') # 在文档第2个段落里添加111.jpg对图片inline_shape.height = int(document.inline_shapes[0].height * 0.5022627985455307) # 按照比例设置图片高度inline_shape.width = int(document.inline_shapes[0].width * 0.3557203287251082) # 按照比例设置图片宽度document.save('test1.docx') # 保存为test1.docx按比例设置图片大小见下图
按比例设置图片大小图 在text1.docx文档中生成的第3三个图像与第2个图像是一样的。
按照固定比例设置图像大小
在设置图大小时经常用到固定比例,以便于图像调整大小时不会发生变形。固定比例就是将图片高度和宽度设置相同的比例,代码如下:
inline_shape = document.paragraphs[1].add_run().add_picture('111.jpg') # 添加第3个图片inline_shape.height = int(document.inline_shapes[0].height * 0.50) ) # 按照50%比例设置图片高度inline_shape.width = int(document.inline_shapes[0].width * 0.50) # 按照50%比例设置图片宽度设置图片固定比例为50%效果如下图
设置图片固定比例为50%效果图 在text1.docx文档中实现来插入的第3个图片高度和宽度比例都是50%。
固定比例的另外一种常用的方式就是“锁定比例”。所谓锁定比例就是当设置高度和宽度中的任何一个时,另外一个也会按照相同的比例进行设置。一般经过读取原始图片大高度或者宽度,设置新的值,计算比例,最后将比例设置宽度或者高度。例如,在test.docx文档中添加第3个图片,设置图片高度为3cm,实行锁定比例,代码如下:
inline_shape = document.paragraphs[1].add_run().add_picture('111.jpg') # 添加第3个图片,用于演示锁定比例scale = inline_shape.height # 读取图片原始大小高度inline_shape.height = Cm(3) # 设置图片高度为3cmscale = inline_shape.height / scale # 计算图片比例inline_shape.width = int(document.inline_shapes[0].width * scale) # 按照比例设置图片宽度设置图片锁定比例功能效果如下图
锁定比例功能效果图 在text1.docx文档中生成的第3个图片高度和宽度都是30%。
在插入图片时,经常使用run.add_picture()方法,本质上仍然是在段落中添加,所以,改变段落对齐对齐方式,效果也作用到图片上。例如,如下代码将test.docx文档中对第2个图片设置为居中对齐。
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT # 导入段落对齐包document.paragraphs[1].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER # 设置文档中的第2个段落居中图片居中对齐设置效果图
图片居中对齐 文档中第2个图像实现了居中对齐。在WD_PARAGRAPH_ALIGNMENT可以实现LEFT、RIGHT、CENTER、JUSTY和DISTRIBUTE等5种对齐方式。含义如下:
WD_PARAGRAPH_ALIGNMENT.LEFT:左对齐WD_PARAGRAPH_ALIGNMENT.CENTER:居中对齐WD_PARAGRAPH_ALIGNMENT.RIGHT:右对齐WD_PARAGRAPH_ALIGNMENT.JUSTIFY:两端对齐WD_PARAGRAPH_ALIGNMENT.DISTRIBUTE:分散对齐段落的对齐方式更多内容可以参考文章python-docx段落设置。
笔者总结使用python-docx包设置图片大小和对齐方式等2部分内容,制作来思维导图。
python-docx设置图片大小和对齐方式