用 Python 給自己的頭像加一個小國旗(小月餅)

2020-10-02 12:00:08


今天是國慶節也是中秋節,首先祝大家節日快樂,本文我們使用 Python 來給自己的頭像加一個小國旗或小月餅。

國旗

對於國旗,我們可以使用 Python 來畫一個,用到的 Python 庫是大家比較熟悉的 turtle,我們的五星紅旗組成元素包括:紅底、一顆黃的主星和四顆黃的副星。

首先畫一個長方形的紅底,程式碼實現如下:

turtle.setup(600, 400, 0, 0)
turtle.bgcolor("red")

效果如下:

接著畫一顆主星,程式碼實現如下:

turtle.fillcolor("yellow")
turtle.color('yellow')
turtle.speed(10)
# 主星
turtle.begin_fill()
turtle.up()
turtle.goto(-280,100)
turtle.down()
for i in range (5):
    turtle.forward(150)
    turtle.right(144)
turtle.end_fill()

效果如下:

最後畫四顆副星,程式碼實現如下:

# 副星1
turtle.begin_fill()
turtle.up()
turtle.goto(-100,180)
turtle.setheading(305)
turtle.down()
for i in range (5):
    turtle.forward(50)
    turtle.left(144)
turtle.end_fill()
# 副星2
turtle.begin_fill()
turtle.up()
turtle.goto(-50,110)
turtle.setheading(30)
turtle.down()
for i in range (5):
    turtle.forward(50)
    turtle.right(144)
turtle.end_fill()
# 副星3
turtle.begin_fill()
turtle.up()
turtle.goto(-40,50)
turtle.setheading(5)
turtle.down()
for i in range (5):
    turtle.forward(50)
    turtle.right(144)
turtle.end_fill()
# 副星4
turtle.begin_fill()
turtle.up()
turtle.goto(-100,10)
turtle.setheading(300)
turtle.down()
for i in range (5):
    turtle.forward(50)
    turtle.left(144)
turtle.end_fill()

最終效果如下:

月餅

對於月餅也可以用 Python 來畫一個,月餅組成元素主要包括:外層圓形的花紋輪廓、內層輪廓和文字。

首先來畫外層圓形的花紋輪廓,程式碼實現如下:

turtle.speed(100)
turtle.color("#F5E16F")
for i in range(20):
    # 順時針移動18度
    turtle.right(18)
    turtle.begin_fill()
    # 向前移動的距離
    turtle.forward(220)
    # 畫半徑為 40 的半圓
    turtle.circle(40, 180)
    # 畫完半圓之後回到(0,0)
    turtle.goto(0, 0)
    turtle.right(360)
    turtle.end_fill()

效果如下:

再接著畫內層輪廓,程式碼實現如下:

# 設定畫筆粗細
turtle.pensize(20)
# 填充顏色(外部、內部)
turtle.color("#F5E16F", "#FF9933")
goto(0, -200)
# 準備開始填充
turtle.begin_fill()
turtle.circle(200)
# 填充結束
turtle.end_fill()
turtle.right(360)
turtle.color('#F5E16F')
goto(0, -180)
for i in range(12):
    turtle.begin_fill()
    turtle.circle(60, 120)
    turtle.left(180)
    turtle.circle(60, 120)
    turtle.end_fill()

效果如下:

最後來新增文字,比如豆沙餡的就新增豆沙兩個字,程式碼實現如下:

turtle.color("#F5E16F")
turtle.write("豆沙", font=("隸書", 60, "bold"))

最終效果如下:

頭像加國旗(月餅)

最後,我們將剛才畫好的國旗或月餅加到自己的頭像上,用到的 Python 庫是 OpenCV,安裝使用 pip install opencv-python 命令即可,如果速度太慢,可以使用 pip install -i https://mirrors.aliyun.com/pypi/simple/ opencv-python 加速下載安裝。

這個功能實現起來也比較簡單,只需十幾行 Python 程式碼就可以搞定,程式碼實現如下:

# 讀取頭像和國旗圖案
img_head = cv2.imread('head.jpg')
img_flag = cv2.imread('flag.png')
# 獲取頭像和國旗圖案寬度
w_head, h_head = img_head.shape[:2]
w_flag, h_flag = img_flag.shape[:2]
# 計算圖案縮放比例
scale = w_head / w_flag / 4
# 縮放圖案
img_flag = cv2.resize(img_flag, (0, 0), fx=scale, fy=scale)
# 獲取縮放後新寬度
w_flag, h_flag = img_flag.shape[:2]
# 按 3 個通道合併圖片
for c in range(0, 3):
    img_head[w_head - w_flag:, h_head - h_flag:, c] = img_flag[:, :, c]
# 儲存最終結果
cv2.imwrite('new_head.jpg', img_head)

假如我的原頭像如下:

給頭像加個小國旗,效果如下:

給頭像加個小月餅,效果如下: