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
    +关注

    关注

    56

    文章

    4797

    浏览量

    84793
  • GIF
    GIF
    +关注

    关注

    0

    文章

    24

    浏览量

    6596

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

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

收藏 人收藏

    评论

    相关推荐

    谷景告诉插件功率电感坏了可以什么替代

    谷景告诉插件功率电感坏了可以什么替代 编辑:谷景电子 当插件功率电感损坏时,我们能否其他类型的电感来替代?这是一个非常实用的问题,且很多人一直在问。尤其是在电子设备维修和设计领域
    的头像 发表于 09-22 20:27 231次阅读

    怎样用THS3201实现输出功率可调?

    怎样用THS3201实现输出功率可调?
    发表于 08-26 08:28

    OPA735加OPA333,怎样用TINA TI去仿真?

    当输入信号VG1从7.06V慢慢变化到7.22V时。 输出电压Vout的变化必须是接近线性变化的。我想知道我该怎样用TINA TI去仿真?怎样设置那个输入信号VG1才能达到我的目的。因为这个电压源好像
    发表于 08-02 08:39

    pytorch和python的关系是什么

    ,PyTorch已经成为了一个非常受欢迎的框架。本文介绍PyTorch和Python之间的关系,以及它们在深度学习领域的应用。 Python简介
    的头像 发表于 08-01 15:27 2051次阅读

    怎样用Arduino测试锂电池容量

    本文详细介绍了如何用Arduino测量锂电池的容量。并附有电路图和Arduino的程序代码。
    的头像 发表于 07-30 09:14 929次阅读
    <b class='flag-5'>怎样用</b>Arduino测试锂电池容量

    python写验证环境cocotb

    本文介绍了cocotb的安装、python tb文件的写法、xrun仿真cocotb的脚本等,我们来看看体验如何。
    的头像 发表于 07-24 09:38 568次阅读
    <b class='flag-5'>用</b><b class='flag-5'>python</b>写验证环境cocotb

    如何实现Python复制文件操作

    Python 中有许多“开盖即食”的模块(比如 os,subprocess 和 shutil)以支持文件 I/O 操作。在这篇文章中,将会看到一些 Python 实现文件复制的特殊
    的头像 发表于 07-18 14:53 433次阅读

    pycharm进行python爬虫的步骤

    以下是使用PyCharm进行Python爬虫的步骤: 安装PyCharm和Python 首先,您需要安装PyCharm和Python。PyCharm是一个流行的Python集成开发环境
    的头像 发表于 07-11 10:11 881次阅读

    怎样用STM8L的PB3/TIM2_TRIG的引脚测量脉宽?

    怎样用STM8L的PB3/TIM2_TRIG的引脚测量脉宽?
    发表于 05-07 06:55

    stm32f100怎样用重映射功能?

    的是stm32f100c8t6b芯片,现在想用PB1映射为TIM1_CH3N,在调用GPIO_PinAFConfig(GPIOB,GPIO_PinSource1,GPIO_AF_TIM1)时, GPIO_PinAFConfig和GPIO_AF_TIM1都没定义,st
    发表于 05-07 06:06

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

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

    500字告诉学会焊PCB板有什么

    的组件,以修复问题。这可以节省维修费用,延长设备的使用寿命。 2.制作原型和实验电路:焊接技能使能够制作原型电路板和进行各种实验。可以设计和布局自己的电路,并将电子元件焊接到PCB
    的头像 发表于 03-04 14:10 639次阅读

    基于Python的地图绘制教程

    本文介绍通过Python绘制地形图的方法,所需第三方Python相关模块包括 rasterio、geopandas、cartopy 等,可通过 pip 等方式安装。
    的头像 发表于 02-26 09:53 1246次阅读
    基于<b class='flag-5'>Python</b>的地图绘制教程

    通过Python脚本实现WIFI密码的自动猜解

    本文记录学习下如何通过 Python 脚本实现 WIFI 密码的自动猜解。
    的头像 发表于 01-25 10:46 3500次阅读
    通过<b class='flag-5'>Python</b>脚本实现WIFI密码的自动猜解

    如何使用NVTFAT显示GIF

    如何使用NVTFAT显示GIF
    发表于 01-18 06:48