用Python实现PPT转化图片

640?wx_fmt=jpeg

图片来源于网络


 
 

1

前言


笔者前一阵在学习数据相关的东西,从初学开始,一直在参加社区中的图表小挑战此项活动是社区出题人给出一定官方数据,参加小挑战的人员可以对数据进行可视化,从而挖掘出有趣的信息。


而这个可视化的过程中,用到的可视化工具叫 Tableau ,大家有兴趣可以去查看下,能做出非常美丽的图,之前一直分享在朋友圈里,有些朋友也看到了。


在参与比赛的过程中,笔者遇到一个头疼的点,每次做成的图表拷到ppt中,要想可观的将ppt中的多个图叠在一起生成一张长图,或者单独生成图片,是万万不能实现的!而微软的PPT要自己安装插件!


经过百般查找,一些在线网站是支持的,但是要不是遇到了图片限定大小,要不遇到了带水印的!


于是,ε=(´ο`*)))唉,还是自己动手,丰衣足食一下吧!有了这个想法,用 Python 实现下这个功能!估计也有不少人有此需求吧。。


明确需求,确认下目标,其一,可以实现 ppt 每页都生成对应图片。其二,支持将图片进行长图合并。


2

效果演示


先来看下我的 ppt ,一共三页:


640?wx_fmt=jpeg


演示效果:


640?wx_fmt=gif


3

核心代码讲解


1. ppt 转 png 方法,利用 win32com 来操作 ppt。

def ppt2png(ppt_path, long_sign: str):	
    """	
    ppt 转 png 方法	
    :param ppt_path: ppt 文件的绝对路径	
    :param long_sign: 是否需要转为生成长图的标识	
    :return:	
    """	
    if os.path.exists(ppt_path):	
        output_path = output_file(ppt_path)  # 判断文件是否存在	
	
        ppt_app = win32com.client.Dispatch('PowerPoint.Application')	
        ppt = ppt_app.Presentations.Open(ppt_path)  # 打开 ppt	
        ppt.SaveAs(output_path, 17)  # 17数字是转为 ppt 转为图片	
        ppt_app.Quit()  # 关闭资源,退出	
	
        if 'Y' == long_sign.upper():	
            generate_long_image(output_path)  # 合并生成长图	
	
    else:	
        raise Exception('请检查文件是否存在!\n')


2. 多个单图合并,生成长图,使用了 PIL。


PIL:Python Imaging Library,已经是Python平台事实上的图像处理标准库了。PIL功能非常强大,但API却非常简单易用。由于PIL仅支持到Python 2.7,加上年久失修,于是一群志愿者在PIL的基础上创建了兼容的版本,名字叫Pillow,支持最新Python 3.x,又加入了许多新特性,因此,我们可以直接安装使用Pillow。

廖雪峰官方站

在使用 PIL 之前,需要先安装 pillow 。(中文,枕头的意思)


 
 
$ pip install pillow
 
 
def generate_long_image(output_path):	
    picture_path = output_path[:output_path.rfind('.')]	
    last_dir = os.path.dirname(picture_path)  # 上一级文件目录	
	
    # 获取单个图片	
    ims = [Image.open(os.path.join(picture_path, fn)) for fn in os.listdir(picture_path) if fn.endswith('.png')]	
    width, height = ims[0].size  # 取第一个图片尺寸	
    long_canvas = Image.new(ims[0].mode, (width, height * len(ims)))  # 创建同宽,n高的白图片	
	
    # 拼接图片	
    for i, image in enumerate(ims):	
        long_canvas.paste(image, box=(0, i * height))	
	
    long_canvas.save(os.path.join(last_dir, 'long-image.png'))  # 保存长图


代码没什么可讲的,注释写的贼清楚啦!自行观看即可!


4

结语


在自己"造轮子"之前,其实笔者是查阅了相关资料的,github 上有两个脚本,但是不符合笔者的需求,所以还是又重新造了一遍。。。


本项目可以当做入门,实用的练手小项目,自己写外加调试大概用了一个多小时,即可完成。


热 门 推 荐
用Python创建微信机器人

用Python机器人监听微信群聊

用Python获取摄像头并实时控制人脸

开源项目 | 用Python美化LeetCode仓库

推荐Python中文社区旗下的几个服务类公众号
征稿启事 | Python中文社区有奖征文

640?wx_fmt=gif

  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值