2015-05-31 20 views
12

kullanarak bir animasyon oluşturma Şekiller ve sayılar içeren basit bir diyagram oluşturabilirim.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() 

Ben de moviepy kullanarak bir versiyonunu yarattı: Aşağıdaki kodu kullanıyorum ben her adımı arasında bir zaman gecikmesi kullanarak animasyonlu GIF oluşturmak mümkün olmak istiyorum

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) 

Çevrim.

cevap

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) 
ben bunu çoktan

enter image description here

2

MoviePy'yi (Gizeh'in yazarından bir modül) kullanmayı deneyin. Gizeh ve MoviePy animasyon için kullanılan iyi bir makaleye
Görünüş: http://zulko.github.io/blog/2014/09/20/vector-animations-with-python/

+1

. Sorum, "t" işlev parametresi yerine – Hugo

+0

yerine boyutları ve koordinatları kontrol etmek için "açık" bir döngü kullandığım, her bir 't' için önceden tanımlanmış koordinatları ve boyutları sözlüğe taşıyabilir ve 'make_frame' işlevinden bunlara erişebilir – Delimitry

+1

Zaten tüyler ürpertici denemişseniz, lütfen sorunuzdaki kodu güncelleyin. – Delimitry