Python愛心動畫GIF


love.gif
之前寫過一個在終端打印心形的程序,雖然看起來有點詭異。。。這次寫一個愛心的GIF動畫。
使用一個庫gif, 可以制作matplotlib圖表的gif動畫。上面那個gif動畫,是隱去了坐標軸了后的動畫了。

正文

下面三個庫,沒安裝的可以通過命令安裝:

$pip install matplotlib
$pip install numpy
$pip install gif

實際代碼:

import gif
import numpy as np
from matplotlib import pyplot as plt


# formula see https://www.wolframalpha.com/share/clip?f=d41d8cd98f00b204e9800998ecf8427edn0q2vrnts
t = np.linspace(0, 6, 100)
x = 16 * np.sin(t) ** 3
y = 13 * np.cos(t) - 5 * np.cos(2 * t) - 2 * np.cos(3 * t) - np.cos(4 * t)

## 繪制每一幀的圖片
@gif.frame
def plot_love(x, y):
    plt.scatter(x, y, 60, c="g", alpha=0.7, marker=r'$\heartsuit$')
    plt.axis("off")


frames = []
for i in range(1, len(x)):
    of = plot_love(x[:i], y[:i])
    frames.append(of)

gif.save(frames, 'love.gif', duration=80)

代碼解析

繪制心形的函數,可以見https://www.wolframalpha.com/share/clip?f=d41d8cd98f00b204e9800998ecf8427edn0q2vrnts

通過心形函數,算出x,y對應的坐標值,plot_love函數本身是個普通的繪制散點圖的函數,marker是設置成心形,通過plt.axis("off")用於去除坐標軸。如果一次性將所有數據(例子程序中共100個坐標數據)傳入該函數,作圖出來是完整的一張心形圖,就向下面這樣:
image.png

動畫中的從一個小愛心,慢慢變成大愛心,實際就是第一次傳一個坐標的數據去作圖,然后依次增加直到所有數據都用完。把所有的圖按照順序合在一起做成gif動畫,就是呈現了動畫效果了。

@gif.frame裝飾器是把將每個圖片作圖加載到內存中,通過for循環,確定每一幀的圖片,保存到frames列表里,最后通過gif.save函數合在一起做成gif動畫。

參考

https://github.com/maxhumber/gif
https://www.jianshu.com/p/3992eb671c9e


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM