蝙蝠侠作为DC漫画的核心人物之一,一贯都受到广大粉丝的喜好,而笔者作为DC的铁杆粉丝,自然也是老爷(粉丝对蝙蝠侠的昵称)的支持者。
本日,笔者就用Python来画一个蝙蝠侠的logo,大概便是下图这个样子:

图1. 蝙蝠侠的logo

这次作图全程用matplotlib,IDE用的是Spyder,系统是Windows7

1).首先导入各种库

简单几步100行代码用Python画一个蝙蝠侠的logo

2).然后设置一下画图板

图片坐标系为X轴和Y轴都在0—100的范围。
patches变量后面会用到。

3).接下来再画两个椭圆

第一个椭圆是黄色的,宽64,高34,放在最下面,第二个是玄色的,宽60,高30,放在第一个椭圆之上,两者的中央都是坐标为(50, 50)的点。

es1 = Ellipse([50, 50], width=64, height=34, facecolor='yellow', zorder=1)

es2 = Ellipse([50, 50], width=60, height=30, facecolor='black', zorder=2)

大概便是下面的效果。

图2. 两个椭圆的效果图

然后画出图片左上部分的缺口,这部分用来显示蝙蝠的头部和翅膀。

这里我们用了3阶贝赛尔曲线,Path的CURVE4方法就代表3阶贝塞尔曲线,CURVE3则是2阶。
3阶贝赛尔曲线须要4个坐标点,我们就设置好4个坐标点;

末了还要把这块图的边线宽度设为0,否则会有玄色边线涌现影响效果。
这个缺口图设置为黄色

这样就和下面的第一个椭圆的颜色一样,就能产生缺口效果。

#lw是边线宽度为0

大体效果如下图。

图3. 第一个缺口的效果图

4).接下来再画出图片的第二个缺口

位于图片左下方,这次我们用的是2阶贝塞尔曲线,便是Path的CURVE3方法,这里须要3个坐标点。
其他设置和patch1类似。
大体效果如下。
这里我们可以看到形成了一些不规则部分,不用担心,后面会把这些不规则的地方去掉。

图4. 第二个缺口的效果图

5).画第三个缺口

然后在左下方的第一个缺口阁下再画一个缺口,也便是本图的第三个缺口。
方法和上一个缺口类似,都是2阶贝塞尔曲线,只是坐标点不同,其他都一样。

第三个缺口形成的效果如下图。

图5. 第三个缺口的效果图

至此,本图基本上完成了一半,看到这里大家基本上可以看出蝙蝠标志的大概意思了,这便是蝙蝠的左翼,如果还没明白的话,把右侧再画完,就可以看清楚了。
由于蝙蝠标志是旁边对称的,以是我们只要在本图的右侧再依葫芦画瓢,对称画这几个缺口就可以了。

6).对称的画出右边部分

我们的坐标系是0至100的范围,图片中央坐标是(50, 50),以是右侧缺口的所有x坐标为100减去左侧缺口的对应x坐标的结果,所有y坐标不变。
下面直接放上右侧3个缺口的代码,和左侧是完备对应的,patch4是右上的缺口,patch5是右下边最右侧的缺口,patch6是右下边靠中间的缺口。

#右下1

path_data5 ,path_data6都是类似的,完成两翼的绘制之后,大体效果如下。

图6. 完成两翼后的效果图

7).画出头部的效果

这时候看起来还不太像蝙蝠,倒有点像烤乳鸽,没事再画完蝙蝠头部就OK了。
蝙蝠头的代码如下,便是画出一个倒立的梯形,上底边长一些,下底边短一些,用的是Path的MOVETO方法,须要设置四个坐标点。
颜色还是黄色,边线宽度还是0。

头部效果如下图所示。

图7. 完成头部后的效果图

到这里全体蝙蝠侠logo的蝙蝠部分就画完了,但是还有一些细节部分要处理一下:

比如再加个玄色边框,然后再把不规则的部分去掉;

玄色边框仍用一个椭圆,这个椭圆命名为es3,和第一个黄色椭圆大小一样,但不添补,只设置边线宽度为4,默认为玄色;

然后再画一个椭圆es4,仍不添补,边线宽度设置为10,设为白色,这样就能把那些不规则的地方隐去;

代码如下:

es3 = Ellipse([50, 50], width=64, height=34, fill=False, lw=4, zorder=2) #不添补,同时边线宽度设置为4,默认为玄色

es4 = Ellipse([50, 50], width=68, height=38, fill=False, lw=10, edgecolor='white', zorder=2) #不添补,同时边线宽度设置为10,边线设为白色

末了的完成图效果如下。

图8. 完成效果图

至此,一个蝙蝠侠的logo完备搞定,我们再放上一个猛男配色和一个蓝色的logo,分别给蝙蝠女和罗宾,只须要把上面的黄色更换为粉色和蓝色即可。
蝙蝠家族就算完成了。

图9. 蝙蝠女logo

图10. 罗宾logo

Python还是很有趣的,真的是无所不能!
除了爬虫,数据剖析,自动化测试,自动化办公,后端网站开拓,人工智能机器学习,现在还能做画酷酷的画。
真的很少有一门措辞能如此大略而强大,学一门Python可以干好多事情,值了。