2015-05-31 31 views
12

Sono in grado di creare un semplice diagramma con forme e numeri. Sto usando il seguente codice:Creazione di un'animazione utilizzando Python Gizeh

import gizeh as gz 

W, H = 500, 300 

surface = gz.Surface(W,H, bg_color=(1,0.7,1)) 

for a in range(1,9): 
    rect = gz.rectangle(lx = 10, ly = 10, xy=(W/a,H/a), fill =(0,1,0.7)) 
    rect.draw(surface) 
    txt = gz.text(str(a), fontfamily="Dancing Script", fontsize=15, fill=(0,0,0),xy=(W/a,H/a)) 
    txt.draw(surface) 

surface.ipython_display() 

ho anche creato una versione con moviepy:

import numpy as np 
import gizeh as gz 
import moviepy.editor as mpy 

W, H = 500, 300 
duration = 5 
figpath = '/tmp/' 
fps = 1 

def make_frame(t): 

    surface = gz.Surface(W,H, bg_color=(1,1,1)) 

    rect = gz.rectangle(lx = 10, ly = 10, xy=(W/(t+1),H/2), fill =(0,1,0.7)) 
    rect.draw(surface) 
    txt = gz.text(str(t+1), fontfamily="Dancing Script", fontsize=15, fill=(0,0,0),xy=(W/(t+1),H/2)) 
    txt.draw(surface) 

    return surface.get_npimage() 

clip = mpy.VideoClip(make_frame, duration=duration) 
clip.write_videofile(figpath + 'trax_0.mp4', fps=fps) 

clip.ipython_display(fps=fps, width=W, autoplay=0, loop=0) 

Mi piacerebbe essere in grado di creare GIF animate utilizzando un ritardo tra ogni fase del ciclo.

risposta

1
#!/usr/bin/env python3 

import numpy as np 
import gizeh as gz 
import moviepy.editor as mpy 

W,H = 128,128 # 128x128 pixel 
duration = 2 # 2 seconds 
ncircles = 20 # Number of circles 

def make_frame(t): 

    surface = gz.Surface(W,H) 

    for i in range(ncircles): 
     angle = 2*np.pi*(1.0*i/ncircles+t/duration) 
     center = W*(0.5+ gz.polar2cart(0.1,angle)) 
     circle = gz.circle(r= W*(1.0-1.0*i/ncircles), 
           xy= center, fill= (i%2,i%2,i%2)) 
     circle.draw(surface) 

    return surface.get_npimage() 

clip = mpy.VideoClip(make_frame, duration=duration) 
clip.write_gif("circles.gif",fps=15, opt="OptimizePlus", fuzz=10) 

enter image description here

2

Prova a utilizzare MoviePy - un modulo dall'autore di Gizeh.
Guardate un buon articolo in cui vengono utilizzati Giza e MoviePy per l'animazione: http://zulko.github.io/blog/2014/09/20/vector-animations-with-python/

+1

ho fatto già. La mia domanda è come uso un ciclo "esplicito" per controllare le dimensioni e le coordinate invece del parametro funzione "t" – Hugo

+0

puoi spostare le coordinate e le dimensioni predefinite per ogni "t" al dizionario e accedervi dalla funzione "make_frame" – Delimitry

+1

Se hai già provato MoviePy, aggiorna il codice nella tua domanda. – Delimitry