使用 Python Gizeh 构建动画
Building an animation using 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()
我还使用 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)
我希望能够在循环的每个步骤之间使用时间延迟来创建动画 GIF。
尝试使用 MoviePy - 来自 Gizeh 作者的模块。
看一篇很好的文章,其中 Gizeh 和 MoviePy 用于动画:
http://zulko.github.io/blog/2014/09/20/vector-animations-with-python/
#!/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)
我能够用形状和数字创建一个简单的图表。 我正在使用以下代码:
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()
我还使用 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)
我希望能够在循环的每个步骤之间使用时间延迟来创建动画 GIF。
尝试使用 MoviePy - 来自 Gizeh 作者的模块。
看一篇很好的文章,其中 Gizeh 和 MoviePy 用于动画:
http://zulko.github.io/blog/2014/09/20/vector-animations-with-python/
#!/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)