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

    关注

    57

    文章

    4857

    浏览量

    89579
  • GIF
    GIF
    +关注

    关注

    0

    文章

    24

    浏览量

    7002

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    LABVIEW 2023 Q1调用python后一直报错1671

    程序后续重新下载pythonpython版本改为3.6.0(32位,同labview版本:Python 3.6.0 (v3.6.0:41df79263a11, Dec 23 201
    发表于 11-12 09:51

    Python调用API教程

    两个不同系统之间的信息交互。在这篇文章中,我们详细介绍Python调用API的方法和技巧。 一、Requests库发送HTTP请求 使用Python调用API的第一步是发送HTTP
    的头像 发表于 11-03 09:15 324次阅读

    Python 给 Amazon 做“全身 CT”——可量产、可扩展的商品详情爬虫实战

    一、技术选型:为什么选 Python 而不是 Java? 结论: “调研阶段 Python,上线后如果 QPS 爆表再考虑 Java 重构。” 二、整体架构速览(3 分钟看懂) 三、开发前准备(5
    的头像 发表于 10-21 16:59 386次阅读
    <b class='flag-5'>用</b> <b class='flag-5'>Python</b> 给 Amazon 做“全身 CT”——可量产、可扩展的商品详情爬虫实战

    自制巡线解迷宫机器人(上)

    一玩,当然如果在使用的过程中遇到了一些问题,欢迎在GitHub上给我提交Issues或者在文章评论区里留言,有空的话我肯定会及时回复的。 巡线解迷宫机器人图1原理 硬件 电机电源层 电机电源层
    发表于 10-20 10:39

    如何使用 NVTFAT 显示 GIF

    如何使用 NVTFAT 显示 GIF
    发表于 09-04 06:47

    termux调试python猜数字游戏

    termux做一个猜数字游戏 下面是在Termux中创建猜数字游戏的步骤及完整实现方案,结合Python实现(最适配Termux环境): ? 一、环境准备(Termux基础配置) 1.
    发表于 08-29 17:15

    基础篇3:掌握Python中的条件语句与循环

    Python编程语言中,条件语句和循环是构成复杂逻辑和数据处理的基石。本篇基础教程帮助您深入了解Python中的条件语句和循环结构,让您能够更好地控制程序流程。 条件语句 条件语句允许程序根据
    发表于 07-03 16:13

    单片机项目实例:STM32上JPG_GIF图片显示并支持缩放

    单片机项目实例:STM32上JPG_GIF图片显示并支持缩放,推荐下载!
    发表于 06-03 22:10

    知道船变压器有哪些吗?

    在船舶和海洋平台上,电力系统的稳定运行至关重要,而船变压器作为其中的关键设备,其种类繁多,各具特点。知道船变压器有哪些吗?让我们一起来揭开它们的神秘面纱。CSD船变压器是船舶供
    的头像 发表于 06-01 00:00 469次阅读
    <b class='flag-5'>你</b>知道船<b class='flag-5'>用</b>变压器有哪些吗?

    python入门圣经-高清电子书(建议下载)

    此资料内容是一本针对所有层次的Python 读者而作的Python 入门电子书。 全书分两部分:第一部分介绍Python 编程所必须了解的基本概念,包括matplotlib、NumP
    发表于 04-10 16:53

    ​如何在虚拟环境中使用 Python,提升的开发体验~

    RaspberryPiOS预装了Python需要使用其虚拟环境来安装包。今天出版的最新一期《TheMagPi》杂志刊登了我们文档负责人NateContino撰写的一篇实用教程,帮助你入门
    的头像 发表于 03-25 09:34 628次阅读
    ​如何在虚拟环境中使用 <b class='flag-5'>Python</b>,提升<b class='flag-5'>你</b>的开发体验~

    零基础入门:如何在树莓派上编写和运行Python程序?

    在这篇文章中,我将为简要介绍Python程序是什么、Python程序可以用来做什么,以及如何在RaspberryPi上编写和运行一个简单的Python程序。什么是
    的头像 发表于 03-25 09:27 1523次阅读
    零基础入门:如何在树莓派上编写和运行<b class='flag-5'>Python</b>程序?

    DLP6500能否Python编程进行开发,是否有API接口?

    本人第一次接触DLP的开发板,想知道DLP6500这款板子能否Python编程进行开发,是否有API接口?
    发表于 02-28 06:58

    如何python文件导入到ROS系统中

    本文通过使用myCobot机械臂进行QR码视觉追踪的实践案例分析,介绍如何 python 文件导入到 ROS 系统中。
    的头像 发表于 02-11 11:08 1194次阅读
    如何<b class='flag-5'>将</b><b class='flag-5'>python</b>文件导入到ROS系统中

    使用Python实现xgboost教程

    使用Python实现XGBoost模型通常涉及以下几个步骤:数据准备、模型训练、模型评估和模型预测。以下是一个详细的教程,指导如何在Python中使用XGBoost。 1. 安装XGBoost
    的头像 发表于 01-19 11:21 2214次阅读