登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本文搬运自公众号:气象备忘录。分享编程语言和模式技巧,欢迎关注、点赞和转发~
https://mp.weixin.qq.com/s/gNwE9WvtnD44Grd50dcXRw
科研或者业务中,在制作ppt时常常遇到重复粘贴大量图片的情况,手动制作难免需要不断复制粘贴,裁剪白边,调整位置等一系列操作,颇为繁琐,这里介绍利用python自动生成ppt并批量贴图的方法,从此解放双手,ppt一键搞定,不仅可以节省大量时间,提高工作效率,还可大大提升幸福感哦。 现在以自动生成每页贴16张图片,图片按4×4方式排列的ppt为例,对方法进行详细介绍。(PS 脚本通顺,粘贴即可直接使用。) 首先需要导入的模块: - import os
- from PIL import Image, ImageOps
- from pptx import Presentation
- from pptx.util import Inches, Pt, Cm
复制代码 对图片的处理主要分为三部分:
- def crop_margin(img_fileobj, out, padding=(0, 0, 0, 0)):
- image = Image.open(img_fileobj).convert('RGB')
- ivt_image = ImageOps.invert(image)
- bbox = ivt_image.getbbox()
- left = bbox[0] - padding[0]
- top = bbox[1] - padding[1]
- right = bbox[2] + padding[2]
- bottom = bbox[3] + padding[3]
- cropped_image = image.crop([left, top, right, bottom])
- cropped_image.save(out)
- return
复制代码
- def new_page(prs, SLD_LAYOUT_TITLE_AND_CONTENT = 6):
- slide_layout = prs.slide_layouts[SLD_LAYOUT_TITLE_AND_CONTENT]
- slide = prs.slides.add_slide(slide_layout)
- return slide
复制代码
- def Add_pic(slide, img, img_left, img_top, img_height):
- img_path = img
- left = Cm(img_left)
- top = Cm(img_top)
- pic = slide.shapes.add_picture(img_path, left, top, height=Cm(img_height))
复制代码下面是主程序代码: - if __name__ == "__main__":
- prs = Presentation() # 新建ppt
- prs.slide_width = Cm(33.867) # 调整页面大小
- prs.slide_height = Cm(19.05)
- imagePath = r'F:\kk'
- imgs = os.listdir(imagePath)
- imgs.sort()
- imgs_list = [os.path.join(imagePath, i) for i in imgs if i[-4:] == '.png']
- for ith,img in enumerate(imgs_list):
- crop_margin(img, img) #切除图片白边
- print(ith, img)
- res = ith % 16 # 这里以一页ppt放16张图为例,获取图片序号
- if res == 0: slide = new_page(prs) # 如果是第一张图,则新建空白页
- # 指定每一张图的位置信息(可以先手动贴图获取 )
- if res in [0, 4, 8, 12]: img_left = 0.12 #第一列
- if res in [1, 5, 9, 13]: img_left = 8.47 #第二列
- if res in [2, 6, 10, 14]: img_left = 16.94 #第三列
- if res in [3, 7, 11, 15]: img_left = 25.38
- if res in [ 0, 1, 2, 3]: img_top = 0.05 #第一行
- if res in [ 4, 5, 6, 7]: img_top = 4.64
- if res in [ 8, 9, 10, 11]: img_top = 9.25
- if res in [12, 13, 14, 15]: img_top = 13.91
- Add_pic(slide, img, img_left, img_top, 5) # 贴图
- prs.save(imagePath+'/pic.pptx') # 保存ppt
复制代码
贴出来的成品如下图所示:
是不是十分整齐美观呢?按照上面脚本的思路,还可以衍生出一页ppt贴不同类型、大小、位置的图片、添加文本,以及编辑两页循环,三页循环等更加丰富的ppt版式,看到这里是不是已经心动了呢,那就赶快试一试吧!
|