图片来源于网络
笔者前一阵在学习数据相关的东西,从初学开始,一直在参加社区中的
图表小挑战 此项活动是社区出题人给出一定官方数据,参加小挑战的人员可以对数据进行可视化,从而挖掘出有趣的信息。
而这个可视化的过程中,用到的可视化工具叫 Tableau ,大家有兴趣可以去查看下,能做出非常美丽的图,之前一直分享在朋友圈里,有些朋友也看到了。
在参与比赛的过程中,笔者遇到一个头疼的点,每次做成的图表拷到ppt中,要想 可观的 将ppt中的多个图叠在一起生成一张长图,或者单独生成图片,是万万不能实现的!而微软的PPT要自己安装插件!
经过百般查找,一些在线网站是支持的,但是要不是遇到了图片限定大小,要不遇到了带水印的!
于是,ε=(´ο`*)))唉,还是自己动手,丰衣足食一下吧!有了这个想法,用 Python 实现下这个功能!估计也有不少人有此需求吧。。
**在明确需求,确认下目标
每页都生成对应图片。
其二,支持将图片进行长图合并。**
先来看下我的 ppt ,一共三页:
演示效果:
核心代码讲解
PIL:Python Imaging Library,已经是Python平台事实上的图像处理标准库了。PIL功能非常强大,但API却非常简单易用。由于PIL仅支持到Python 2.7,加上年久失修,于是一群志愿者在PIL的基础上创建了兼容的版本,名字叫Pillow,支持最新Python 3.x,又加入了许多新特性,因此,我们可以直接安装使用Pillow。
廖雪峰官方站
在使用 PIL 之前,需要先安装 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')) # 保存长图代码没什么可讲的,注释写的贼清楚啦!自行观看即可!
在自己"造轮子"之前,其实笔者是查阅了相关资料的,github 上有两个脚本,但是不符合笔者的需求,所以还是又重新造了一遍。。。
本项目可以当做入门,实用的练手小项目,自己写外加调试大概用了一个多小时,即可完成。
热 门 推 荐