阅读 272

PPT批量制作封面图及导出视频教程(ppt如何制作封面图片)

前言

距离运营人员提出PPT,word自动转图片没多久后。有天运营跑过来说道,能不能自动生成封面图,以及视频。因为每次手动一个一个打开PPT再用islide导出封面图工作很繁琐,效率也不高。

有了上次写PPT,word自动转图片的栗子,这次写起来也十分顺手了。

本文python版本3.9.5 需windows 平台,需安装Microsoft Office

脚本思路

python读取目录下的PPT->打开PPT->导出图片->拿到图片拼接制作封面图。 先来看看运营要求的封面图,读取PPT的前7张,第一张宽度铺满,第二张开始等比分配

拿到PPT集合

def getPpt():      files = os.listdir("./"+pptFilePath)      return files 复制代码

删除文件夹

def removeFileInFirstDir(targetDir):     for file in os.listdir(targetDir):          targetFile = os.path.join(targetDir,  file)          if os.path.isfile(targetFile):              os.remove(targetFile) 复制代码

PPT转图片顺便把视频也转出来

def ppt2png(ppt_path,powerpoint,fileName):     try:         ppt = powerpoint.Presentations.Open(ppt_path)         #保存为图片         img_path = os.path.abspath(imgFilePath + '.png')         ppt.SaveAs(img_path, 18) # 17保存为jpg格式          # quality:0-100. The level of quality of the slide. The higher the number, the higher the quality.         quality = 60         # resolution:The resolution of the slide. 480,720,1080...         resolution = 720         # frames: The number of frames per second.         frames = 24         mp4_target = os.path.abspath('./ppt/'+fileName+'.mp4')         print(mp4_target)         print(fileName,"----正在转成视频")         ppt.CreateVideo(mp4_target,-1,1,resolution,frames,quality)         while True:             try:                 time.sleep(0.1)                 if os.path.exists(mp4_target) and os.path.getsize(mp4_target) == 0:                     # The filesize is 0 bytes when convert do not complete.                     continue                 break             except Exception as e:                 print (e)                 break         # 关闭打开的ppt文件         ppt.Close()     except IOError:         print('PPT转png失败',ppt_path)     else:         print('\n')         print('\n')         print("PPT转png成功",ppt_path) 复制代码

图片拼接成封面图

def getCover(fileName):     # 封面图  w 1012 h 1431 空白6      w = 1012     h = 1431     padding = 6     toImage = Image.new('RGB',(w,h),"#E6F5FF") # #E6F5FF填充背景     files = os.listdir("./"+imgFilePath)     files.sort(key = lambda x : int(x.split('.')[0][3:])) #使用sort进行按顺序读取     for index,value in enumerate(files):         if(index <7 ):             _path = os.path.abspath('./img/'+value)             pic_fole_head = Image.open(_path)             # 获取图片的尺寸             if(index==0):                 #第一张图片宽度铺满 1012 - 6 -6 ,高度561                  # 按照指定的尺寸,给图片重新赋值,<PIL.Image.Image image mode=RGB size=200x200 at 0x127B7978>                 tmppic = pic_fole_head.resize((w - padding * 2, 561))                 # 计算每个图片的左上角的坐标点(0, 0)                 loc = (6,6)                 toImage.paste(tmppic, loc)             else:                 # 按照指定的尺寸,给图片重新赋值,<PIL.Image.Image image mode=RGB size=200x200 at 0x127B7978>                 # w = 1012                 # h = 1431                 # padding = 6                 smallW  = int((1012 - padding * 3 ) / 2 )                 tmppic = pic_fole_head.resize((smallW, 280))                 # 计算每个图片的左上角的坐标点(0, 0),(200, 0),(200, 200)                 line = math.ceil(index/2) #计算处于第几行                 x = 6                  if(index % 2 ==0):                     x = smallW + padding * 2                 loc = (int(x ), int((line-1) * 280 + 561 + (line+1)* 6))                 toImage.paste(tmppic, loc)     toImage.save("./ppt/"+fileName+'.png')     print(fileName+'封面生成成功') 复制代码

初始化PPT

def init_powerpoint():     powerpoint = win32com.client.Dispatch('PowerPoint.Application') #comtypes.client.CreateObject("Powerpoint.Application")     powerpoint.Visible = 1     return powerpoint 复制代码

最后调用

if __name__=='__main__':     powerpoint = init_powerpoint()     pptArr = getPpt()     print('---pptArr--',pptArr)     for index,value in enumerate(pptArr):         if(('.ppt' in value) ==True):             removeFileInFirstDir('./'+imgFilePath)             _path = os.path.abspath('./ppt/'+value)             fileName = os.path.basename(_path).split('.')[0]             ppt2png(_path,powerpoint,fileName)             getCover(fileName)         time.sleep(2)     powerpoint.Quit()     # removeFileInFirstDir('./'+imgFilePath)     input("输入任意键结束") 复制代码

运行后的封面图及视频

最后打包成exe文件给运营人员用就可以了

pyinstaller -c -F -i a.ico index.py  复制代码

结尾

感谢jym的阅读

公众号:微信搜【进阶的大前端】


作者:web_zhou
链接:https://juejin.cn/post/7042203010390786078


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐