用Python來繪製一個微信圖標

有一句至理名言說得好"Python除了不會生孩子,什麼都能幹"(當然這句話還有很多版本,比如MATLAB、Excel......),而今天筆者就再次證明一下這個觀點——用Python來設計一個微信logo。

微信恐怕是我們最常用的手機軟件了,其logo也經歷了多次變化,這次我們就用最經典的微信綠色圖標來作為例子,給大家展示一下如何用Python來進行設計。其圖例如下。

用Python來繪製一個微信圖標


筆者的操作系統是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來繪製一個微信圖標

圖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來繪製一個微信圖標

圖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來繪製一個微信圖標

圖5. 兩個扇形的效果圖


最後我們再放上微信另外一個版本logo的圖片,這和上面的設計方法完全一樣,只是要把兩個橢圓和各自的扇形的顏色改變一下,左邊的橢圓和扇形的顏色代碼為"#A1CC3F",右邊的顏色代碼為"#E9E9E9",同時把右邊橢圓的邊框線去掉,把四個小眼睛設置為黑色,最後把畫布背景設置為白色就OK了。

用Python來繪製一個微信圖標

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


從這個例子中我們可以看到matplotlib在應對簡單的圖形繪製時還是非常的得心應手,簡單的數行代碼就完成了一個微信圖標的設計。都說Python不能生孩子,下次研究一下怎麼讓Python生個娃出來。


分享到:


相關文章: