数据挖掘 (二)——基于 Python 的图片墙制作

导语

最近接了一个任务,就是将公司部门的员工参与团建活动的照片拼接在一张图片墙上面。为了完成这个任务, 我下载了许多应用,但是基本上只能支持九张照片的拼接,这显然无法满足我的需求。参考了很多网友的帖子,经过不懈努力,最后终于找到一个合适的解决方案——使用 Python + Pillow 实现照片墙。

实例演示

为了方便不熟悉python编程的同学使用,我特意将脚本打包成了可执行程序(exe),下面我先展示该exe文件的使用方式。


1)第一步

首先准备好待拼接的图片,数量尽量多一点,这样拼接之后才有视觉冲击感。我通过爬虫爬取了当当网上的图书照片(下篇文章介绍爬虫),并将其放在了 pictures 文件夹下,照片大概有个近一千张吧,部分如下所示,
数据挖掘 (二)——基于 Python 的图片墙制作


2)第二步

运行程序 pictureWallTool.exe ,如下所示,
数据挖掘 (二)——基于 Python 的图片墙制作

等待数秒之后,会弹出第一个对话框,让你选择存放图片源的文件夹,我选择了 pictures 文件夹,如下所示,
数据挖掘 (二)——基于 Python 的图片墙制作

点击选择文件夹后,会弹出第二个对话框,让你选择保存照片墙的文件名,如下所示,

数据挖掘 (二)——基于 Python 的图片墙制作

单击保存,可以看到立即生成了照片墙,如下所示,
数据挖掘 (二)——基于 Python 的图片墙制作


3)第三步

最后就是愉快的看生成的结果怎么样啦!下图是用我的图片源生成的照片墙,

数据挖掘 (二)——基于 Python 的图片墙制作

怎么样?是不是感觉很高大上!!哈哈。

DEMO 脚本中所使用到的一些 function 有不懂的可百度或谷歌,查看各自的详细描述。脚本在使用时与图片不需要非得放在一起,因为程序运行后会弹出对话框让用户选择,这个对话框会返回一个绝对地址。DEMO 程序的源代码、可执行文件及图片源文件夹可关注本小编的公众号,回复 关键词 图片墙制作 获取。


不足

  • 在代码中我只对图片进行了读取和缩放处理,并没有涉及拉伸、旋转、裁剪等变换,由于我设置待拼接的所有照片都为正方形,因此对于图片尺度比例差距比较大的图片,缩放后会出现变形。为了保证缩放之后的效果,可以利用opencv库添加更多的图片预处理措施。由于工作繁忙,这一块没有继续深入下去。

  • 此外,每行的图片数量的选择也很关键。例如 30 张图片可以分为 5×6 排布,31 张照片可以分布为 4×8 排布。最理想状态是脚本自动识别图片个数并合理分配,这块功能暂时没有写入 DEMO 中。

  • 最后,图片摆放的位置也可以变化,不一定非要正方形,比如可以摆成心形、圆形等等,以达到更好的视觉效果。这些都没有在程序中实现,有兴趣的朋友可以深入下去,将这个功能做的更加多样性。