0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

怎样用Python制作迷宫GIF 本文将告诉你诀窍

马哥Linux运维 来源:电子发烧友网 作者:工程师谭军 2018-07-13 08:57 次阅读

安装

可以通过PyPi安装

怎样用Python制作迷宫GIF 本文将告诉你诀窍

或者通过Git

怎样用Python制作迷宫GIF 本文将告诉你诀窍

为什么你需要这个库?

问:我是一个Python迷,并且对迷宫的生成和迷宫解决的办法非常感兴趣。我很羡慕别人能够做出生成迷宫的动画。我如何能够用Python自己做一个迷宫动画,然后把我的成果展示给其他人呢?(我知道tkinter, pyglet 和 pyqt,但是它们很难发布给别人看)

答:现在,你可以使用库gifmaz来做这件事了,它有一些很好的特性:

1、它是纯Python编写的,没有第三方依赖,只使用内置模块!(如果你想把动画嵌入图片,那么你需要PIL,PIL虽然不是内置模块,但是任何Python版都支持PIL。除此之外再没有其他的依赖了)

2、它运行速度很快,而且几秒钟就能生成优化过的GIF图片。每个GIF通常都包含上千帧,但是GIF大小确只有几百KB。

3、你可以绘制各种各样的迷宫动画,和解迷宫动画。

4、代码都有很好的注释,文档有很好的范例,而且文档很完整。

这个库的一个教程

首先我们需要构建一个GIFSurface对象(类似cairo的ImageSurface类),我们的动画将会画在这个对象上。同时,我们需要指定图片的大小和可用的颜色数量。

怎样用Python制作迷宫GIF 本文将告诉你诀窍

这里color_depth=2意味着调色板中有2^2=4种颜色,bg_color=0说明调色板中的第0个颜色被作为背景色。

只要你还没有最后保存图片,你都可以更改设置调色板,你可以这样做

怎样用Python制作迷宫GIF 本文将告诉你诀窍

所以图片中可以用的颜色有:黑、白、品红、黑。

然后我们构建一个环境,生成的动画基于这个环境构建(类似cairo的Context类)。

怎样用Python制作迷宫GIF 本文将告诉你诀窍

然后我们设置这个动画的控制参数

怎样用Python制作迷宫GIF 本文将告诉你诀窍

这些参数的意思是“每20步渲染一帧,帧之间间隙0.05s,调色板中第四个颜色作为通明度通道”。

我们有了绘制动画的“桌面”,和绘制动画需要的参数,接下来就是实际地画一个迷宫了。

怎样用Python制作迷宫GIF 本文将告诉你诀窍

这个语句在图片中央绘制了一个迷宫,然后在四边留了8像素的空白,迷宫中每一格在图片中占据5像素*5像素的大小。

然后让我们运行Prim的迷宫算法

怎样用Python制作迷宫GIF 本文将告诉你诀窍

其中我加了两个延迟帧,以便我们能够看清楚动画的过程。

完成了!让我们把这个动画保存到GIF文件。

怎样用Python制作迷宫GIF 本文将告诉你诀窍

下面是运行结果,大小小于300K,很赞吧!

当然,你也可以把多个算法整合进一个动画。下面的动画展示了随机深度优先搜索算法和A*搜索算法。(这个图片只有120K)

这个库的原理是什么?

这个库实际上是一个GIF的编码库,算法运行过程中,动画帧被编码为BytesIO文件。只有在调用save方法时,动画才会真正地被存入图片。

深度资料

1、什么是GIF:http://www.matthewflickinger.com/lab/whatsinagif/bits_and_bytes.asp。

2、迷宫生成算法:http://weblog.jamisbuck.org/2011/2/7/maze-generation-algorithm-recap

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • python
    +关注

    关注

    51

    文章

    4678

    浏览量

    83476
  • GIF
    GIF
    +关注

    关注

    0

    文章

    23

    浏览量

    6468

原文标题:用Python制作迷宫GIF

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    STM32F412G-DISCO怎样用MX生成fatfs的代码?

    STM32F412G-DISCO怎样用MX生成fatfs的代码? SD卡例程能跑,但mx生成的代码不能正常运行,我生成代码后是不是还要配置一些东西?(我生成后只写了测试代码) 问题解决了,虽然我不知道我为什么不能直接使用mx生成的代码去操作sd卡,但我通过复制粘贴例程的代码完成了测试。
    发表于 03-12 08:15

    无线通信:怎样用电磁波表示1和0

    为什么频率越高,能携带的信息就越多?以数字信号为例,信息就是一串串的1和0,所以先搞清楚怎样用电磁波表示1和0。
    发表于 12-05 14:44 628次阅读
    无线通信:<b class='flag-5'>怎样用</b>电磁波表示1和0

    ADAU1452做FFT分析,怎样设定取样点的数量?

    请问,我想用ADAU1452做FFT分析,怎样设定取样点的数量,还有就是怎样用单片机读出分析得到的复数结果数组?谢谢!
    发表于 11-29 06:42

    怎样用ADAU1761设计DRC的压缩/扩展?

    请问怎样用ADAU1761设计DRC的压缩/扩展。我在SigmaStudio 4.5的模块中只找到RMS。如果ADAU1761设计DRC要怎样
    发表于 11-28 06:41

    Arduino篇—车辆自动走迷宫

    机器人迷宫项目:是常见的机器人竞赛项目,在一个搭建好的迷宫场景内,设计机器人,实现从入口顺利抵达出口,根据完成时间的长短来进行评分。
    的头像 发表于 11-02 11:31 1170次阅读
    Arduino篇—车辆自动走<b class='flag-5'>迷宫</b>

    怎样用32单片机测电压?

    怎样用32单片机测电压
    发表于 10-31 07:09

    怎样用现成的Eclipse插件来调试AT32系列芯片以及SLIB的配置范例

    本篇应用指南主要描述怎样用现成的Eclipse插件来调试AT32系列芯片以及SLIB的配置范例。本文档仅以AT32F403A为例进行说明,关于AT32F403A SLIB的详细说明,请详阅《AT32F403ASecurity Library Application Not
    发表于 10-24 07:41

    怎样用现成的Eclipse插件来调试AT32系列芯片

    拥有很高的灵活性,软件可以以Eclipse为架构开发自己的IDE。这边文档主要描述怎样用现成的Eclipse插件来调试AT32系列芯片。
    发表于 10-24 07:12

    求助,PID调节有哪些诀窍

    PID调节有哪些诀窍
    发表于 10-17 06:12

    怎样用单片机IO口来控制三极管的开关特性使共阳极的LED点亮?

    怎样用单片机IO口来控制三极管的开关特性使共阳极的LED点亮
    发表于 10-15 06:02

    PLC中怎样用X和Y两个轴走出直线轨迹?

    PLC中怎样用X和Y两个轴走出直线轨迹呢?那么这两个轴需要配合成速度成线性比例,位置和速度应该如何云运算呢?
    发表于 09-12 09:58 379次阅读
    PLC中<b class='flag-5'>怎样用</b>X和Y两个轴走出直线轨迹?

    使用Pi和Python制作艺术、游戏等

    电子发烧友网站提供《使用Pi和Python制作艺术、游戏等.zip》资料免费下载
    发表于 06-27 09:24 0次下载
    使用Pi和<b class='flag-5'>Python</b><b class='flag-5'>制作</b>艺术、游戏等

    如何使用MCU xpresso IDE中的post build命令构建项目后执行python本文件?

    我想在使用 MCUxpresso IDE 中的 post build 命令构建项目后执行 python本文件。请让我知道执行 python 脚本或 .exe 文件的过程。
    发表于 05-10 09:29

    怎样用示波器测试lin总线的波特率呢?

    怎样用示波器测试lin总线的波特率呢?有什么方法吗?
    发表于 05-09 11:22

    怎样用FPGA实现FSK调制解调呢?

    最近想做这方面的,怎样用FPGA实现FSK调制解调?但是我一点头绪都没有,哪位高手帮帮忙,讲解一下什么的
    发表于 05-08 17:34