查看原文
其他

用python制作抽奖券,附全部代码

2017-01-09 天地本无心 生信媛

任何一个生信岗位的招聘要求,恐怕都有一条: 需要熟练掌握python/perl/R或者其它编程语言中的一种或几种。所以学会一门编程语言是生信进阶的刚需。(这里说的“学会”的最低要求就是掌握如何处理文本),但是python作为一门这么可爱的语言,如果仅仅处理文本,那就真是大材小用了。最好的学习方式,就是用python来解决生活中的实际问题。寓学于乐。


昨天晚上正在干活,一个师妹过来问我一个问题。说想给今天举办的研究所元旦联欢会制作抽奖券,师妹本来准备在word里面,生成1-400个数字,并且调到合适大小之后,将二维码粘贴在数字的右边。结果发现要一个一个地调大小,再贴二维码。而今天就是研究所元旦晚会,如果手工去做,时间肯定来不及,并且效果也不好看,问我有没有什么好的办法。正好程序提交的间隙,有大概两个小时的时间让自己去干点别的。


说干就干。不过先要明确目的。

一张抽奖券的自我修养是:左边有显眼的数字,右边有活动的二维码。并且如果能够添加上赞助公司的信息,想必也是极好的。


严正声明: 此公众号没有接受任何一家公司的广告!如果上述公司看到了这篇文章,想给广告费,我们也是不会拒绝的哈~


稍微一思考,就想到了python里面的PIL包。还记得上次的生信媛全家福吗,其中也是用了PIL。
不到一会就实现了目的,效果如下。




首先基本原理就是对基本数字的使用,下载0, 1, 2, ..., 9数字代表的图片。然后比如说当面对183这样的数字的时候,就可以把183拆开成1, 8, 3. 然后将这些数字对应的图片依次粘贴到一起,最后添加上二维码。再说通俗一点,就是先用PIL准备一块合适大小的画布,然后将图片依次画上去。


首先我们需要去搜集素材。

网址:  www.xqxtp.com/beijing/45594.html 

找到了我们需要的素材。当然这时候我们可以用python里的request库,或者urllib2库来爬取整个图片,但是因为我们的素材仅仅限于0到9,直接保存得了。也就不到一分钟的事儿。写代码是为了方便,但是有更方便的方法,那还写什么代码啊。


写好之后,放入一个文件夹。命名随意,但最好整齐保持一致,方便使用。




我们可以看到单个数字的左右两边都比较宽,如果变成两位数拼接在一起,或者变成三位数拼接在一起,数字之间的空隙比较大,影响美观。所以,我们先要截取数字图片,进行一些预处理。用QQ热键ctrl+Alt+A吗? 当然不是,用的是PIL库里的函数。先上代码。





通过这几行代码,就可以将照片根据到底是二位数还是三位数,裁剪成合适的大小。


这一部分的代码运行完之后,就会自动在当前目录下生成两个文件夹。



我们可以看到数字的大小有所变化。


让我们再来说说二维码吧,如果直接放二维码,二维码占据空间太大,感觉没多大必要,师妹说了,如果能添加赞助公司的信息就好了。


如何编辑二维码呢,如果你熟悉AI/PS,那自然非常方便,如果不熟悉,也没关系,PPT就挺好用的。总之,编辑之后的效果就是这样的。




接着上代码:




上面的一段代码的目的就是我们最关键的步骤了。比如说对于两位数,从10循环到99,  就利于91这个数字,循环读取“91”, 然后依次在画布上粘贴“9”对应的图片,然后粘贴上“1”对应的图片,然后添加上二维码, 然后接着循环处理其它的数字。


应为对于二位数字,还是三位数字,处理方式都一样,如果分开写的话,会有很多重复代码,而python的哲学就是"Do not repeat yourself". 所以写成函数,然后传递参数调用函数就行。




以上就是全部的代码,最后生成了0-399个这样的抽奖券,运行可以在30秒之内完成,前前后后不到一小时。


人生苦短,快用python。 

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存