Python 20 秒画完小猪佩奇“社会人”!

每天写代码的程序员,你们知道今年社交平台上最火的带货女王是谁吗?范冰冰?杨幂?Angelababy?不,是猪猪女孩小猪佩奇。

如果你经常用抖音、快手、B 站、知乎、微博……或者类似的任何一个内容或社交平台,那你很大概率能答出这道题:

答案是:掌声送给社会人。

随着口号喊响,社会人小猪佩奇似乎一夜之间就在短视频平台和社交网络上爆火了,同时网络上遍布了小猪佩奇九步画法。于是我在儿童节这一天画了一下,结果,不忍直视......

我画的o(╯□╰)o

人家的画

观察这个图像可以发现,小猪佩奇在构图基本是各种曲线,类抛物线、类圆、类椭圆、类二次贝塞尔曲线。这里说的都是“类”,这也正是小猪佩奇的构图精髓,一种手绘风格,而不是标准刻板的线条。在前端技术选型上,画图首先想到的是 SVG、Canvas,但它们本身就擅长画图,而且网上都有在线编辑 SVG 的工具,这就没意思了,我想佩奇也不会答应的。于是我想用纯粹的 Python 来做,这样更有挑战,因为画图画曲线不是 Python 擅长的事情。

基本思路如下:

选好画板大小,设置好画笔颜色、粗细,定位好位置,依次画鼻子、头、耳朵、眼睛、腮、嘴、身体、手脚、尾巴,完事儿。

都知道,Turtle 是 Python 内置的一个比较有趣味的模块,俗称“海龟绘图”,它是基于 Tkinter 模块打造,提供一些简单的绘图工具。

在海龟作图中,我们可以编写指令让一个虚拟的(想象中的)海龟在屏幕上来回移动。这个海龟带着一只钢笔,我们可以让海龟无论移动到哪都使用这只钢笔来绘制线条。通过编写代码,以各种很酷的模式移动海龟,我们可以绘制出令人惊奇的图片。使用海龟作图,我们不仅能够只用几行代码就创建出令人印象深刻的视觉效果,而且还可以跟随海龟看看每行代码如何影响到它的移动。这能够帮助我们理解代码的逻辑。

所以,海龟作图也常被用作新手学习 Python 的一种方式。更丰富详细的功能及知识可以参考官方文档:

https://docs.python.org/3/library/turtle.html


代码如下:

#!/usr/bin/env python2  
# coding=utf-8  
  
import turtle as t  
  
t.pensize(4)  
t.hideturtle()  
t.colormode(255)  
t.color((255,155,192),"pink")  
t.setup(840,500)  
t.speed(10)  
  
#鼻子  
t.pu()  
t.goto(-100,100)  
t.pd()  
t.seth(-30)  
t.begin_fill()  
a=0.4  
for i in range(120):  
    if 0<=i<30 or 60<=i<90:  
        a=a+0.08  
        t.lt(3) #向左转3度  
        t.fd(a) #向前走a的步长  
    else:  
        a=a-0.08  
        t.lt(3)  
        t.fd(a)  
t.end_fill()  
  
t.pu()  
t.seth(90)  
t.fd(25)  
t.seth(0)  
t.fd(10)  
t.pd()  
t.pencolor(255,155,192)  
t.seth(10)  
t.begin_fill()  
t.circle(5)  
t.color(160,82,45)  
t.end_fill()  
  
t.pu()  
t.seth(0)  
t.fd(20)  
t.pd()  
t.pencolor(255,155,192)  
t.seth(10)  
t.begin_fill()  
t.circle(5)  
t.color(160,82,45)  
t.end_fill()  
  
#头  
t.color((255,155,192),"pink")  
t.pu()  
t.seth(90)  
t.fd(41)  
t.seth(0)  
t.fd(0)  
t.pd()  
t.begin_fill()  
t.seth(180)  
t.circle(300,-30)  
t.circle(100,-60)  
t.circle(80,-100)  
t.circle(150,-20)  
t.circle(60,-95)  
t.seth(161)  
t.circle(-300,15)  
t.pu()  
t.goto(-100,100)  
t.pd()  
t.seth(-30)  
a=0.4  
for i in range(60):  
    if 0<=i<30 or 60<=i<90:  
        a=a+0.08  
        t.lt(3) #向左转3度  
        t.fd(a) #向前走a的步长  
    else:  
        a=a-0.08  
        t.lt(3)  
        t.fd(a)  
t.end_fill()  
  
#耳朵  
t.color((255,155,192),"pink")  
t.pu()  
t.seth(90)  
t.fd(-7)  
t.seth(0)  
t.fd(70)  
t.pd()  
t.begin_fill()  
t.seth(100)  
t.circle(-50,50)  
t.circle(-10,120)  
t.circle(-50,54)  
t.end_fill()  
  
t.pu()  
t.seth(90)  
t.fd(-12)  
t.seth(0)  
t.fd(30)  
t.pd()  
t.begin_fill()  
t.seth(100)  
t.circle(-50,50)  
t.circle(-10,120)  
t.circle(-50,56)  
t.end_fill()  
  
#眼睛  
t.color((255,155,192),"white")  
t.pu()  
t.seth(90)  
t.fd(-20)  
t.seth(0)  
t.fd(-95)  
t.pd()  
t.begin_fill()  
t.circle(15)  
t.end_fill()  
  
t.color("black")  
t.pu()  
t.seth(90)  
t.fd(12)  
t.seth(0)  
t.fd(-3)  
t.pd()  
t.begin_fill()  
t.circle(3)  
t.end_fill()  
  
t.color((255,155,192),"white")  
t.pu()  
t.seth(90)  
t.fd(-25)  
t.seth(0)  
t.fd(40)  
t.pd()  
t.begin_fill()  
t.circle(15)  
t.end_fill()  
  
t.color("black")  
t.pu()  
t.seth(90)  
t.fd(12)  
t.seth(0)  
t.fd(-3)  
t.pd()  
t.begin_fill()  
t.circle(3)  
t.end_fill()  
  
#腮  
t.color((255,155,192))  
t.pu()  
t.seth(90)  
t.fd(-95)  
t.seth(0)  
t.fd(65)  
t.pd()  
t.begin_fill()  
t.circle(30)  
t.end_fill()  
  
#嘴  
t.color(239,69,19)  
t.pu()  
t.seth(90)  
t.fd(15)  
t.seth(0)  
t.fd(-100)  
t.pd()  
t.seth(-80)  
t.circle(30,40)  
t.circle(40,80)  
  
#身体  
t.color("red",(255,99,71))  
t.pu()  
t.seth(90)  
t.fd(-20)  
t.seth(0)  
t.fd(-78)  
t.pd()  
t.begin_fill()  
t.seth(-130)  
t.circle(100,10)  
t.circle(300,30)  
t.seth(0)  
t.fd(230)  
t.seth(90)  
t.circle(300,30)  
t.circle(100,3)  
t.color((255,155,192),(255,100,100))  
t.seth(-135)  
t.circle(-80,63)  
t.circle(-150,24)  
t.end_fill()  
  
#手  
t.color((255,155,192))  
t.pu()  
t.seth(90)  
t.fd(-40)  
t.seth(0)  
t.fd(-27)  
t.pd()  
t.seth(-160)  
t.circle(300,15)  
t.pu()  
t.seth(90)  
t.fd(15)  
t.seth(0)  
t.fd(0)  
t.pd()  
t.seth(-10)  
t.circle(-20,90)  
  
t.pu()  
t.seth(90)  
t.fd(30)  
t.seth(0)  
t.fd(237)  
t.pd()  
t.seth(-20)  
t.circle(-300,15)  
t.pu()  
t.seth(90)  
t.fd(20)  
t.seth(0)  
t.fd(0)  
t.pd()  
t.seth(-170)  
t.circle(20,90)  
  
#脚  
t.pensize(10)  
t.color((240,128,128))  
t.pu()  
t.seth(90)  
t.fd(-75)  
t.seth(0)  
t.fd(-180)  
t.pd()  
t.seth(-90)  
t.fd(40)  
t.seth(-180)  
t.color("black")  
t.pensize(15)  
t.fd(20)  
  
t.pensize(10)  
t.color((240,128,128))  
t.pu()  
t.seth(90)  
t.fd(40)  
t.seth(0)  
t.fd(90)  
t.pd()  
t.seth(-90)  
t.fd(40)  
t.seth(-180)  
t.color("black")  
t.pensize(15)  
t.fd(20)  
  
#尾巴  
t.pensize(4)  
t.color((255,155,192))  
t.pu()  
t.seth(90)  
t.fd(70)  
t.seth(0)  
t.fd(95)  
t.pd()  
t.seth(0)  
t.circle(70,20)  
t.circle(10,330)  
t.circle(70,30)  


猜你喜欢

转载自blog.csdn.net/xun527/article/details/80551595