前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python 有料有趣的绘画手艺,真是绝了!

Python 有料有趣的绘画手艺,真是绝了!

作者头像
Wu_Candy
发布2022-07-05 14:44:01
4430
发布2022-07-05 14:44:01
举报
文章被收录于专栏:无量测试之道

之前有段时间被《啥是佩奇》这支广告片刷屏了。

佩奇明明是个喜剧角色,

却看哭了所有人。

备注:大家想看详细视频,可网上搜索观看,此处只截图留样说明

今日分享主题:如何使用 python 绘画小猪佩奇

1、首先来讲下具体的实现思路:

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

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

在海龟作图中,我们可以编写指令让一个虚拟的(想象中的)海龟在屏幕上来回移动。这个海龟带着一只钢笔,我们可以让海龟无论移动到哪都使用这只钢笔来绘制线条。

通过编写代码,以各种很酷的模式移动海龟,我们可以绘制出令人惊奇的图片。

使用海龟作图,我们不仅能够只用几行代码就创建出令人印象深刻的视觉效果,而且还可以跟随海龟看看每行代码如何影响到它的移动。

这能够帮助我们理解代码的逻辑。所以海龟作图也常被用作新手学习 Python 的一种方式。

更丰富详细的功能及知识可以参考:https://docs.python.org/3/library/turtle.html

了解了tuttle的用法之后就可以开始实战了。

2、具体代码实现如下【Python3版本】:

代码语言:javascript
复制
import turtle


def nose(x, y):#鼻子
    turtle.penup()#提起笔
    turtle.goto(x,y)#定位
    turtle.pendown()#落笔,开始画
    turtle.setheading(-30)#将乌龟的方向设置为to_angle/为数字(0-东、90-北、180-西、270-南)
    turtle.begin_fill()#准备开始填充图形
    a = 0.4
    for i in range(120):
        if 0 <= i < 30 or 60 <= i < 90:
            a = a+0.08
            turtle.left(3) #向左转3度
            turtle.forward(a) #向前走a的步长
        else:
            a = a-0.08
            turtle.left(3)
            turtle.forward(a)
    turtle.end_fill()#填充完成
    turtle.penup()
    turtle.setheading(90)
    turtle.forward(25)
    turtle.setheading(0)
    turtle.forward(10)
    turtle.pendown()
    turtle.pencolor(255,155,192)#画笔颜色
    # turtle.color("pink")
    turtle.setheading(10)
    turtle.begin_fill()
    turtle.circle(5)
    turtle.color(160,82,45)#返回或设置pencolor和fillcolor
    turtle.end_fill()
    turtle.penup()
    turtle.setheading(0)
    turtle.forward(20)
    turtle.pendown()
    turtle.pencolor(255,155,192)
    turtle.setheading(10)
    turtle.begin_fill()
    turtle.circle(5)
    turtle.color(160,82,45)
    turtle.end_fill()


def head(x,y):#头
    turtle.color((255,155,192),"pink")
    turtle.penup()
    turtle.goto(x,y)
    turtle.setheading(0)
    turtle.pendown()
    turtle.begin_fill()
    turtle.setheading(180)
    turtle.circle(300,-30)
    turtle.circle(100,-60)
    turtle.circle(80,-100)
    turtle.circle(150,-20)
    turtle.circle(60,-95)
    turtle.setheading(161)
    turtle.circle(-300,15)
    turtle.penup()
    turtle.goto(-100,100)
    turtle.pendown()
    turtle.setheading(-30)
    a = 0.4
    for i in range(60):
        if 0 <= i < 30 or 60 <= i < 90:
            a = a+0.08
            turtle.lt(3)#向左转3度
            turtle.fd(a)#向前走a的步长
        else:
            a = a-0.08
            turtle.lt(3)
            turtle.fd(a)
    turtle.end_fill()


def ears(x,y): #耳朵
    turtle.color((255,155,192),"pink")
    turtle.penup()
    turtle.goto(x,y)
    turtle.pendown()
    turtle.begin_fill()
    turtle.setheading(100)
    turtle.circle(-50,50)
    turtle.circle(-10,120)
    turtle.circle(-50,54)
    turtle.end_fill()
    turtle.penup()
    turtle.setheading(90)
    turtle.forward(-12)
    turtle.setheading(0)
    turtle.forward(30)
    turtle.pendown()
    turtle.begin_fill()
    turtle.setheading(100)
    turtle.circle(-50,50)
    turtle.circle(-10,120)
    turtle.circle(-50,56)
    turtle.end_fill()


def eyes(x,y):#眼睛
    turtle.color((255,155,192),"white")
    turtle.penup()
    turtle.setheading(90)
    turtle.forward(-20)
    turtle.setheading(0)
    turtle.forward(-95)
    turtle.pendown()
    turtle.begin_fill()
    turtle.circle(15)
    turtle.end_fill()
    turtle.color("black")
    turtle.penup()
    turtle.setheading(90)
    turtle.forward(12)
    turtle.setheading(0)
    turtle.forward(-3)
    turtle.pendown()
    turtle.begin_fill()
    turtle.circle(3)
    turtle.end_fill()
    turtle.color((255,155,192),"white")
    turtle.penup()
    turtle.seth(90)
    turtle.forward(-25)
    turtle.seth(0)
    turtle.forward(40)
    turtle.pendown()
    turtle.begin_fill()
    turtle.circle(15)
    turtle.end_fill()
    turtle.color("black")
    turtle.penup()
    turtle.setheading(90)
    turtle.forward(12)
    turtle.setheading(0)
    turtle.forward(-3)
    turtle.pendown()
    turtle.begin_fill()
    turtle.circle(3)
    turtle.end_fill()


def cheek(x,y):#腮
    turtle.color((255,155,192))
    turtle.penup()
    turtle.goto(x,y)
    turtle.pendown()
    turtle.setheading(0)
    turtle.begin_fill()
    turtle.circle(30)
    turtle.end_fill()


def mouth(x, y): #嘴
    turtle.color(239,69,19)
    turtle.penup()
    turtle.goto(x,y)
    turtle.pendown()
    turtle.setheading(-80)
    turtle.circle(30,40)
    turtle.circle(40,80)


def body(): #身体
    turtle.color("red", (255, 99, 71))
    turtle.pu()
    turtle.seth(90)
    turtle.fd(-20)
    turtle.seth(0)
    turtle.fd(-78)
    turtle.pd()
    turtle.begin_fill()
    turtle.seth(-130)
    turtle.circle(100, 10)
    turtle.circle(300, 30)
    turtle.seth(0)
    turtle.fd(230)
    turtle.seth(90)
    turtle.circle(300, 30)
    turtle.circle(100, 3)
    turtle.color((255, 155, 192), (255, 100, 100))
    turtle.seth(-135)
    turtle.circle(-80, 63)
    turtle.circle(-150, 24)
    turtle.end_fill()


def hands():  # 手
    turtle.color((255, 155, 192))
    turtle.pu()
    turtle.seth(90)
    turtle.fd(-40)
    turtle.seth(0)
    turtle.fd(-27)
    turtle.pd()
    turtle.seth(-160)
    turtle.circle(300, 15)
    turtle.pu()
    turtle.seth(90)
    turtle.fd(15)
    turtle.seth(0)
    turtle.fd(0)
    turtle.pd()
    turtle.seth(-10)
    turtle.circle(-20, 90)
    turtle.pu()
    turtle.seth(90)
    turtle.fd(30)
    turtle.seth(0)
    turtle.fd(237)
    turtle.pd()
    turtle.seth(-20)
    turtle.circle(-300, 15)
    turtle.pu()
    turtle.seth(90)
    turtle.fd(20)
    turtle.seth(0)
    turtle.fd(0)
    turtle.pd()
    turtle.seth(-170)
    turtle.circle(20, 90)


def foots():# 脚
    turtle.pensize(10)
    turtle.color((240, 128, 128))
    turtle.pu()
    turtle.seth(90)
    turtle.fd(-75)
    turtle.seth(0)
    turtle.fd(-180)
    turtle.pd()
    turtle.seth(-90)
    turtle.fd(40)
    turtle.seth(-180)
    turtle.color("black")
    turtle.pensize(15)
    turtle.fd(20)
    turtle.pensize(10)
    turtle.color((240, 128, 128))
    turtle.pu()
    turtle.seth(90)
    turtle.fd(40)
    turtle.seth(0)
    turtle.fd(90)
    turtle.pd()
    turtle.seth(-90)
    turtle.fd(40)
    turtle.seth(-180)
    turtle.color("black")
    turtle.pensize(15)
    turtle.fd(20)


def tail():# 尾巴
    turtle.pensize(4)
    turtle.color((255, 155, 192))
    turtle.pu()
    turtle.seth(90)
    turtle.fd(70)
    turtle.seth(0)
    turtle.fd(95)
    turtle.pd()
    turtle.seth(0)
    turtle.circle(70, 20)
    turtle.circle(10, 330)
    turtle.circle(70, 30)


def setting():          #参数设置
    turtle.pensize(4)
    turtle.hideturtle()        #使乌龟无形(隐藏)
    turtle.colormode(255)      #将其设置为1.0或255.随后 颜色三元组的r,g,b值必须在0 .. cmode范围内
    turtle.color((255,155,192),"pink")
    turtle.setup(840, 500)
    turtle.speed(10)


def main():
    setting()           #画布、画笔设置
    nose(-100,100)      #鼻子
    head(-69,167)       #头
    ears(0,160)         #耳朵
    eyes(0,140)         #眼睛
    cheek(80,10)        #腮
    mouth(-20,30)       #嘴
    body()              #身体
    hands()             #手
    foots()             #脚
    tail()              #尾巴
    turtle.done()

if __name__ == '__main__':
    main()

每一个方法都会实现不同部位的绘制功能,请见注释说明。

3、具体绘制效果图如下视频:

//v.qq.com/txp/iframe/player.html?origin=https%3A%2F%2Fmp.weixin.qq.com&containerId=js_tx_video_container_0.4168289338420792&vid=y1357mb7pus&width=677&height=507.75&autoplay=false&allowFullScreen=true&chid=17&full=true&show1080p=false&isDebugIframe=false

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 无量测试之道 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档