0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

怎樣用Python制作迷宮GIF 本文將告訴你訣竅

馬哥Linux運(yùn)維 ? 來(lái)源:電子發(fā)燒友網(wǎng) ? 作者:工程師譚軍 ? 2018-07-13 08:57 ? 次閱讀

安裝

可以通過(guò)PyPi安裝

怎樣用Python制作迷宮GIF 本文將告訴你訣竅

或者通過(guò)Git

怎樣用Python制作迷宮GIF 本文將告訴你訣竅

為什么你需要這個(gè)庫(kù)?

問(wèn):我是一個(gè)Python迷,并且對(duì)迷宮的生成和迷宮解決的辦法非常感興趣。我很羨慕別人能夠做出生成迷宮的動(dòng)畫。我如何能夠用Python自己做一個(gè)迷宮動(dòng)畫,然后把我的成果展示給其他人呢?(我知道tkinter, pyglet 和 pyqt,但是它們很難發(fā)布給別人看)

答:現(xiàn)在,你可以使用庫(kù)gifmaz來(lái)做這件事了,它有一些很好的特性:

1、它是純Python編寫的,沒(méi)有第三方依賴,只使用內(nèi)置模塊?。ㄈ绻阆氚褎?dòng)畫嵌入圖片,那么你需要PIL,PIL雖然不是內(nèi)置模塊,但是任何Python版都支持PIL。除此之外再?zèng)]有其他的依賴了)

2、它運(yùn)行速度很快,而且?guī)酌腌娋湍苌蓛?yōu)化過(guò)的GIF圖片。每個(gè)GIF通常都包含上千幀,但是GIF大小確只有幾百KB。

3、你可以繪制各種各樣的迷宮動(dòng)畫,和解迷宮動(dòng)畫。

4、代碼都有很好的注釋,文檔有很好的范例,而且文檔很完整。

這個(gè)庫(kù)的一個(gè)教程

首先我們需要構(gòu)建一個(gè)GIFSurface對(duì)象(類似cairo的ImageSurface類),我們的動(dòng)畫將會(huì)畫在這個(gè)對(duì)象上。同時(shí),我們需要指定圖片的大小和可用的顏色數(shù)量。

怎樣用Python制作迷宮GIF 本文將告訴你訣竅

這里color_depth=2意味著調(diào)色板中有2^2=4種顏色,bg_color=0說(shuō)明調(diào)色板中的第0個(gè)顏色被作為背景色。

只要你還沒(méi)有最后保存圖片,你都可以更改設(shè)置調(diào)色板,你可以這樣做

怎樣用Python制作迷宮GIF 本文將告訴你訣竅

所以圖片中可以用的顏色有:黑、白、品紅、黑。

然后我們構(gòu)建一個(gè)環(huán)境,生成的動(dòng)畫基于這個(gè)環(huán)境構(gòu)建(類似cairo的Context類)。

怎樣用Python制作迷宮GIF 本文將告訴你訣竅

然后我們?cè)O(shè)置這個(gè)動(dòng)畫的控制參數(shù)

怎樣用Python制作迷宮GIF 本文將告訴你訣竅

這些參數(shù)的意思是“每20步渲染一幀,幀之間間隙0.05s,調(diào)色板中第四個(gè)顏色作為通明度通道”。

我們有了繪制動(dòng)畫的“桌面”,和繪制動(dòng)畫需要的參數(shù),接下來(lái)就是實(shí)際地畫一個(gè)迷宮了。

怎樣用Python制作迷宮GIF 本文將告訴你訣竅

這個(gè)語(yǔ)句在圖片中央繪制了一個(gè)迷宮,然后在四邊留了8像素的空白,迷宮中每一格在圖片中占據(jù)5像素*5像素的大小。

然后讓我們運(yùn)行Prim的迷宮算法。

怎樣用Python制作迷宮GIF 本文將告訴你訣竅

其中我加了兩個(gè)延遲幀,以便我們能夠看清楚動(dòng)畫的過(guò)程。

完成了!讓我們把這個(gè)動(dòng)畫保存到GIF文件。

怎樣用Python制作迷宮GIF 本文將告訴你訣竅

下面是運(yùn)行結(jié)果,大小小于300K,很贊吧!

當(dāng)然,你也可以把多個(gè)算法整合進(jìn)一個(gè)動(dòng)畫。下面的動(dòng)畫展示了隨機(jī)深度優(yōu)先搜索算法和A*搜索算法。(這個(gè)圖片只有120K)

這個(gè)庫(kù)的原理是什么?

這個(gè)庫(kù)實(shí)際上是一個(gè)GIF的編碼庫(kù),算法運(yùn)行過(guò)程中,動(dòng)畫幀被編碼為BytesIO文件。只有在調(diào)用save方法時(shí),動(dòng)畫才會(huì)真正地被存入圖片。

深度資料

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

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4797

    瀏覽量

    84787
  • GIF
    GIF
    +關(guān)注

    關(guān)注

    0

    文章

    24

    瀏覽量

    6596

原文標(biāo)題:用Python制作迷宮GIF

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    谷景告訴插件功率電感壞了可以什么替代

    谷景告訴插件功率電感壞了可以什么替代 編輯:谷景電子 當(dāng)插件功率電感損壞時(shí),我們能否其他類型的電感來(lái)替代?這是一個(gè)非常實(shí)用的問(wèn)題,且很多人一直在問(wèn)。尤其是在電子設(shè)備維修和設(shè)計(jì)領(lǐng)域
    的頭像 發(fā)表于 09-22 20:27 ?231次閱讀

    怎樣用THS3201實(shí)現(xiàn)輸出功率可調(diào)?

    怎樣用THS3201實(shí)現(xiàn)輸出功率可調(diào)?
    發(fā)表于 08-26 08:28

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

    當(dāng)輸入信號(hào)VG1從7.06V慢慢變化到7.22V時(shí)。 輸出電壓Vout的變化必須是接近線性變化的。我想知道我該怎樣用TINA TI去仿真?怎樣設(shè)置那個(gè)輸入信號(hào)VG1才能達(dá)到我的目的。因?yàn)檫@個(gè)電壓源好像
    發(fā)表于 08-02 08:39

    pytorch和python的關(guān)系是什么

    ,PyTorch已經(jīng)成為了一個(gè)非常受歡迎的框架。本文介紹PyTorch和Python之間的關(guān)系,以及它們?cè)谏疃葘W(xué)習(xí)領(lǐng)域的應(yīng)用。 Python簡(jiǎn)介
    的頭像 發(fā)表于 08-01 15:27 ?2041次閱讀

    怎樣用Arduino測(cè)試鋰電池容量

    本文詳細(xì)介紹了如何用Arduino測(cè)量鋰電池的容量。并附有電路圖和Arduino的程序代碼。
    的頭像 發(fā)表于 07-30 09:14 ?928次閱讀
    <b class='flag-5'>怎樣用</b>Arduino測(cè)試鋰電池容量

    python寫驗(yàn)證環(huán)境cocotb

    本文介紹了cocotb的安裝、python tb文件的寫法、xrun仿真cocotb的腳本等,我們來(lái)看看體驗(yàn)如何。
    的頭像 發(fā)表于 07-24 09:38 ?560次閱讀
    <b class='flag-5'>用</b><b class='flag-5'>python</b>寫驗(yàn)證環(huán)境cocotb

    如何實(shí)現(xiàn)Python復(fù)制文件操作

    Python 中有許多“開蓋即食”的模塊(比如 os,subprocess 和 shutil)以支持文件 I/O 操作。在這篇文章中,將會(huì)看到一些 Python 實(shí)現(xiàn)文件復(fù)制的特殊
    的頭像 發(fā)表于 07-18 14:53 ?433次閱讀

    pycharm進(jìn)行python爬蟲的步驟

    以下是使用PyCharm進(jìn)行Python爬蟲的步驟: 安裝PyCharm和Python 首先,您需要安裝PyCharm和Python。PyCharm是一個(gè)流行的Python集成開發(fā)環(huán)境
    的頭像 發(fā)表于 07-11 10:11 ?880次閱讀

    怎樣用STM8L的PB3/TIM2_TRIG的引腳測(cè)量脈寬?

    怎樣用STM8L的PB3/TIM2_TRIG的引腳測(cè)量脈寬?
    發(fā)表于 05-07 06:55

    stm32f100怎樣用重映射功能?

    的是stm32f100c8t6b芯片,現(xiàn)在想用PB1映射為TIM1_CH3N,在調(diào)用GPIO_PinAFConfig(GPIOB,GPIO_PinSource1,GPIO_AF_TIM1)時(shí), GPIO_PinAFConfig和GPIO_AF_TIM1都沒(méi)定義,st
    發(fā)表于 05-07 06:06

    STM32F412G-DISCO怎樣用MX生成fatfs的代碼?

    STM32F412G-DISCO怎樣用MX生成fatfs的代碼? SD卡例程能跑,但mx生成的代碼不能正常運(yùn)行,我生成代碼后是不是還要配置一些東西?(我生成后只寫了測(cè)試代碼) 問(wèn)題解決了,雖然我不知道我為什么不能直接使用mx生成的代碼去操作sd卡,但我通過(guò)復(fù)制粘貼例程的代碼完成了測(cè)試。
    發(fā)表于 03-12 08:15

    500字告訴學(xué)會(huì)焊PCB板有什么?

    的組件,以修復(fù)問(wèn)題。這可以節(jié)省維修費(fèi)用,延長(zhǎng)設(shè)備的使用壽命。 2.制作原型和實(shí)驗(yàn)電路:焊接技能使能夠制作原型電路板和進(jìn)行各種實(shí)驗(yàn)。可以設(shè)計(jì)和布局自己的電路,并將電子元件焊接到PCB
    的頭像 發(fā)表于 03-04 14:10 ?637次閱讀

    基于Python的地圖繪制教程

    本文介紹通過(guò)Python繪制地形圖的方法,所需第三方Python相關(guān)模塊包括 rasterio、geopandas、cartopy 等,可通過(guò) pip 等方式安裝。
    的頭像 發(fā)表于 02-26 09:53 ?1241次閱讀
    基于<b class='flag-5'>Python</b>的地圖繪制教程

    通過(guò)Python腳本實(shí)現(xiàn)WIFI密碼的自動(dòng)猜解

    本文記錄學(xué)習(xí)下如何通過(guò) Python 腳本實(shí)現(xiàn) WIFI 密碼的自動(dòng)猜解。
    的頭像 發(fā)表于 01-25 10:46 ?3494次閱讀
    通過(guò)<b class='flag-5'>Python</b>腳本實(shí)現(xiàn)WIFI密碼的自動(dòng)猜解

    如何使用NVTFAT顯示GIF?

    如何使用NVTFAT顯示GIF?
    發(fā)表于 01-18 06:48