有一句至理名言说得好"Python除了不会生孩子,什么都能干"(当然这句话还有很多版本,比如MATLAB、Excel......),而今天笔者就再次证明一下这个观点——用Python来设计一个微信logo。

微信恐怕是我们最常用的手机软件了,其logo也经历了多次变化,这次我们就用最经典的微信绿色图标来作为例子,给大家展示一下如何用Python来进行设计。其图例如下。




图标修改圆角的python脚本 python 制作图标_Python

图1. 微信经典绿色logo



笔者的操作系统是Windows7,编程软件为Anaconda 2019.10版,所有库均为Anaconda自带,这次主要使用matplotlib绘图库来进行绘制。

首先还是导入各种需要的库。

import matplotlib.pyplot as plt

from matplotlib.collections import PatchCollection

from matplotlib.patches import Circle, Wedge, Polygon, Ellipse

接下来因为我们要在matplotlib的画布中进行设计,所以要进行相关的设置。

color = r'#39CF18'

fig, ax = plt.subplots(figsize=[5, 5])

plt.xticks([]) #去掉x轴

plt.yticks([]) #去掉y轴

ax.set_fc(color) #把画布背景设置为微信的绿色

plt.ylim([0,40])

plt.xlim([0,40])

patches = []

这里的变量color就是微信logo的绿色主色调,我们把画布设置成一个正方形,x轴和y轴的坐标范围都设为0-40,这个数字可以随意设定,主要是为了在画图时找准图形的坐标,同时去掉x轴和y轴的坐标,然后再设置一下画布的颜色,就是微信的绿色,最后的变量patches用于存放一系列图形,后面会用到。

接下来我们就分析一下微信logo的组成。实际上我们可以把微信的主体logo看成三大部分:第一部分是两个椭圆,这两个椭圆一大一小(左边的更大一些),叠加在一起,就是图1中的主要白色的部分;第二部分就是四个小圆圈,分别是这两个椭圆的那两对小眼睛,左边的小眼睛要稍微大一些,右边的稍微小一些;最后就是每个椭圆的箭头,左边椭圆的箭头朝向左侧,右边椭圆的箭头朝向右侧。分析完我们就按照这三部分的顺序依次来绘制。

首先是两个椭圆的代码。

es1 = Ellipse([15,24], width=21, height=18, facecolor='white', zorder=1)

es2 = Ellipse([26,16], width=18, height=15, facecolor='white', linewidth=5, edgecolor=color, zorder=1)

patches.extend([es1, es2])

es1就是左侧的大椭圆,es2是小椭圆,这里es2要设置一下边框线的宽度和边框线的颜色,这样才能产生叠加效果,zorder是图层顺序,数字越大图层越靠上,这里es1和es2的zorder都设置为1,但因为es2后绘制,所以会产生es2叠加在es1之上的效果,如下图所示。




图标修改圆角的python脚本 python 制作图标_微信_02

图2. 两个椭圆的效果图



在这里我们为了能让每部分的效果展示出来,需要加上下面三行代码。这三行代码实际上是放在所有代码之后,所有代码是连在一起的。

p = PatchCollection(patches, match_original=True)

ax.add_collection(p)

plt.show()

接下来绘制四个小眼睛,代码如下。

c1 = Circle([11, 27], radius=1.3, facecolor=color, zorder=2)

c2 = Circle([19, 27], radius=1.3, facecolor=color, zorder=2)

c3 = Circle([23, 18], radius=1, facecolor=color, zorder=2)

c4 = Circle([29, 18], radius=1, facecolor=color, zorder=2)

patches.extend([c1, c2, c3, c4])

每对小眼睛都要关于各自所在椭圆的中线对称,左边的小眼睛要大一些,右边的小一些,把所有小眼睛的颜色都设置为绿色。效果如下图。




图标修改圆角的python脚本 python 制作图标_图标修改圆角的python脚本_03

图3. 四个小圆圈的效果图



最后就是绘制两个箭头,代码如下。

w1 = Wedge([8, 13], r=7, theta1=40, theta2=80, facecolor='white', zorder=2)

w2 = Wedge([33.5, 8.5], r=7, theta1=110, theta2=140, facecolor='white', zorder=2)

patches.extend([w1, w2])

绘制这两个箭头可以说是最大的难点,但其绘制方法有多种,比如可以绘制一个三角形,用三角形的一个角来充当这个箭头,也可以用matplotlib的annotate方法来绘制一个箭头,然后进行填充,这两种方法都可用,但要设置多个坐标同时还难以控制其形状,所以笔者就用了另外一种方法——用扇形的中心角来充当箭头。这种方法的好处是只需要设置一个顶点坐标,同时容易控制中心角的角度,最后的成图效果如下。




图标修改圆角的python脚本 python 制作图标_图标修改圆角的python脚本_04

图4. 微信logo成图



一些人在这里可能没太看明白这两个箭头是怎么画的,那么我们把其他所有图形去掉,只画两个扇形,效果如下。从下图我们可以看到扇形的中心角充当了箭头,而上部的弧形部分和两个椭圆重叠在了一起,因为颜色相同,所以就被隐去了,看不出来了。




图标修改圆角的python脚本 python 制作图标_微信_05

图5. 两个扇形的效果图



最后我们再放上微信另外一个版本logo的图片,这和上面的设计方法完全一样,只是要把两个椭圆和各自的扇形的颜色改变一下,左边的椭圆和扇形的颜色代码为"#A1CC3F",右边的颜色代码为"#E9E9E9",同时把右边椭圆的边框线去掉,把四个小眼睛设置为黑色,最后把画布背景设置为白色就OK了。




图标修改圆角的python脚本 python 制作图标_python颜色代码_06

图6. 微信另一版本logo成图效果



从这个例子中我们可以看到matplotlib在应对简单的图形绘制时还是非常的得心应手,简单的数行代码就完成了一个微信图标的设计。都说Python不能生孩子,下次研究一下怎么让Python生个娃出来。