如何在Python海龟绘图时同步录成gif和视频?

如何在Python海龟绘图时同步把它的每个步骤录成gif和视频文件呢?这里提供了一个最简单的方法,只要调用两个命令即可。一个叫makegif,顾名思义即生成gif。另一个叫makevideo,顾名思义是生成视频的意思。这两个命令都来自gameturtle模块,所以需要安装,安装方法已经说明。

由于这个程序会调用fill命令对五角星的的几个区域进行填充,所以借用了sprites模块的fill命令。还有就是在绘图中需要保存每一“帧”图到内存中。这里运用了sprites模块中屏幕的save命令。所以从sprites模块中导入了Screen命令。sprites库中的Screen命令是turtle模块中Screen命令的增强版。而sprites库中的Sprite命令则是turtle模块中Turtle命令的增强版本。不过,本程序并没有用到Sprite命令,至于showinfo则只是消息对话框用于显示消息。需要注意的是如果使用了sprites模块,则海龟默认是抬笔的。注意是先导入turtle库,再from sprites import ....。为什么要这样呢?因为sprites库会对turtle库中的一些类进行重定义,所以顺序不能搞反了!!!

以下是代码示例:

import turtle
from sprites import fill,Screen,showinfo # pip install sprites --upgrade
from gameturtle import makegif,makevideo # pip install gameturtle --upgrade

screen = Screen()   # Screen命令是turtle模块中Screen命令的增强版
screen.setup(480,360)
# 鼠标移动事件,在标题栏里显示鼠标指针的坐标
screen.onmousemove(lambda x,y:screen.title(f"{x},{y}"))
 
turtle.pensize(5)
turtle.pendown() # 如果使用了sprites模块,则海龟默认是抬笔的。
frames =[]       # 新建列表
for i in range(5):
    # 前进并且保存当前画面到列表
    turtle.fd(200);frames.append(screen.save()) 
    turtle.right(144);frames.append(screen.save())
turtle.penup()
turtle.hideturtle()
frames.append(screen.save())         # 屏幕截取到frames列表中

cs = ['red','orange','yellow','green','cyan','blue']
cors = [(47,-16),(100,25),(153,-16),(133,-78),(63,-78),(96,-34)]
for fc,xy in zip(cs,cors):      
    fill(*xy,fillcolor=fc)        # 填充区域,默认采用洪水填充方式 
    frames.append(screen.save())

makegif(frames,'生成的动图.gif')        # 生成动图
makevideo(frames,'生成的视频.mp4')      # 生成mp4视频
showinfo('提示','gif和mp4文件生成完毕')
         
screen.mainloop()

在程序的运行过程中,会把海龟的每步移动或旋转过程的画面都放在frames列表中。这个画面被存储为pillow图形对象。在最后会调用gameturtle模块中的makegif和makevideo把它们压制成动图和视频文件。至于原理,有兴趣的同学可以自己查看gameturtle模块的代码。这个模块也是本人开发的,也开源了,所以可以下载到它的源代码以进行查看。

以下是生成的gif文件:

以下的视频中就用到了支持洪水填充的fill命令:

你不知道的Python精灵模块

什么?你不知道如何下载sprites模块和gameturtle模块的源代码?那你把我的文章分享到朋友圈,然后截图给我,或者拉我进一个少儿编程群也行。我亲自发送给你源代码,好好学习,天天向上。有兴趣,你就能从我的这两个库中学到很多“高深”的知识。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李兴球

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值