轉載:https://blog.csdn.net/csdnsevenn/article/details/80650456
圖片源自網絡
作者
丁彥軍
如需轉載,請聯系原作者授權。
?
今年社交平臺上最火的帶貨女王是誰?范冰冰?楊冪?Angelababy?不,是豬豬女孩小豬佩奇。
如果你經常用抖音、快手、B站、知乎、微博……或者類似的任何一個內容或社交平臺,那你很大概率能答出這道題:
答案是:掌聲送給社會人。
隨著口號喊響,社會人小豬佩奇似乎一夜之間就在短視頻平臺和社交網絡上爆火了,同時網絡上遍布了小豬佩奇九步畫法。于是我在兒童節這一天畫了一下,結果,不忍直視......
我畫的,哈哈
人家的畫
觀察這個圖像可以發現,小豬佩奇在構圖基本是各種曲線,類拋物線、類圓、類橢圓、類二次貝塞爾曲線。這里說的都是“類”,這也正是小豬佩奇的構圖精髓,一種手繪風格,而不是標準刻板的線條。在前端技術選型上,畫圖首先想到的是svg、canvas,但它們本身就擅長畫圖,而且網上都有在線編輯svg的工具,這就沒意思了,我想佩奇也不會答應的。于是我想用純粹的Python來做,這樣更有挑戰,因為畫圖畫曲線不是Python擅長的事情。
基本思路:選好畫板大小,設置好畫筆顏色,粗細,定位好位置,依次畫鼻子,頭、耳朵,眼睛,腮,嘴,身體,手腳,尾巴,完事。
都知道,turtle 是 python 內置的一個比較有趣味的模塊,俗稱 海龜繪圖,它是基于 tkinter 模塊打造,提供一些簡單的繪圖工具。
在海龜作圖中,我們可以編寫指令讓一個虛擬的(想象中的)海龜在屏幕上來回移動。這個海龜帶著一只鋼筆,我們可以讓海龜無論移動到哪都使用這只鋼筆來繪制線條。通過編寫代碼,以各種很酷的模式移動海龜,我們可以繪制出令人驚奇的圖片。使用海龜作圖,我們不僅能夠只用幾行代碼就創建出令人印象深刻的視覺效果,而且還可以跟隨海龜看看每行代碼如何影響到它的移動。這能夠幫助我們理解代碼的邏輯。所以海龜作圖也常被用作新手學習 Python 的一種方式。更豐富詳細的功能及知識可以參考:(官方文檔:https://docs.python.org/3/library/turtle.html)
了解了tuttle的用法之后就可以開始實戰了。哈哈,先看看效果視頻:
?
詳細代碼如下:
?
from?turtle?import*
def?nose(x,y):#鼻子
? ?penup()#提起筆
? ?goto(x,y)#定位
? ?pendown()#落筆,開始畫
? ?setheading(-30)#將烏龜的方向設置為to_angle/為數字(0-東、90-北、180-西、270-南)
? ?begin_fill()#準備開始填充圖形
? ?a=0.4
? ?for?i?in?range(120):
? ? ? ?if?0<=i<30?or?60<=i<90:
? ? ? ? ? ?a=a+0.08
? ? ? ? ? ?left(3)?#向左轉3度
? ? ? ? ? ?forward(a)?#向前走a的步長
? ? ? ?else:
? ? ? ? ? ?a=a-0.08
? ? ? ? ? ?left(3)
? ? ? ? ? ?forward(a)
? ?end_fill()#填充完成
? ?penup()
? ?setheading(90)
? ?forward(25)
? ?setheading(0)
? ?forward(10)
? ?pendown()
? ?pencolor(255,155,192)#畫筆顏色
? ?setheading(10)
? ?begin_fill()
? ?circle(5)
? ?color(160,82,45)#返回或設置pencolor和fillcolor
? ?end_fill()
? ?penup()
? ?setheading(0)
? ?forward(20)
? ?pendown()
? ?pencolor(255,155,192)
? ?setheading(10)
? ?begin_fill()
? ?circle(5)
? ?color(160,82,45)
? ?end_fill()
def?head(x,y):#頭
? ?color((255,155,192),"pink")
? ?penup()
? ?goto(x,y)
? ?setheading(0)
? ?pendown()
? ?begin_fill()
? ?setheading(180)
? ?circle(300,-30)
? ?circle(100,-60)
? ?circle(80,-100)
? ?circle(150,-20)
? ?circle(60,-95)
? ?setheading(161)
? ?circle(-300,15)
? ?penup()
? ?goto(-100,100)
? ?pendown()
? ?setheading(-30)
? ?a=0.4
? ?for?i?in?range(60):
? ? ? ?if?0<=i<30?or?60<=i<90:
? ? ? ? ? ?a=a+0.08
? ? ? ? ? ?lt(3)?#向左轉3度
? ? ? ? ? ?fd(a)?#向前走a的步長
? ? ? ?else:
? ? ? ? ? ?a=a-0.08
? ? ? ? ? ?lt(3)
? ? ? ? ? ?fd(a)
? ?end_fill()
def?ears(x,y):?#耳朵
? ?color((255,155,192),"pink")
? ?penup()
? ?goto(x,y)
? ?pendown()
? ?begin_fill()
? ?setheading(100)
? ?circle(-50,50)
? ?circle(-10,120)
? ?circle(-50,54)
? ?end_fill()
? ?penup()
? ?setheading(90)
? ?forward(-12)
? ?setheading(0)
? ?forward(30)
? ?pendown()
? ?begin_fill()
? ?setheading(100)
? ?circle(-50,50)
? ?circle(-10,120)
? ?circle(-50,56)
? ?end_fill()
def?eyes(x,y):#眼睛
? ?color((255,155,