tangled
alpha
login
or
join now
cduck.me
/
drawsvg
0
fork
atom
Programmatically generate SVG (vector) images, animations, and interactive Jupyter widgets
0
fork
atom
overview
issues
pulls
pipelines
Fix as_gif/mp4/video and save_gif/mp4/video API
cduck.me
3 years ago
be57a604
80cfbc42
+25
-9
1 changed file
expand all
collapse all
unified
split
drawsvg
drawing.py
+25
-9
drawsvg/drawing.py
reviewed
···
5
5
import string
6
6
import xml.sax.saxutils as xml
7
7
8
8
-
from . import types, elements as elements_module, raster, video, jupyter
8
8
+
from . import (
9
9
+
types, elements as elements_module, raster, video, jupyter, native_animation
10
10
+
)
9
11
10
12
11
13
XML_HEADER = '<?xml version="1.0" encoding="UTF-8"?>\n'
···
330
332
video.'''
331
333
if context is None:
332
334
context = self.context
333
333
-
if duration is None and context.animation_config is not None:
334
334
-
duration = context.animation_config.duration
335
335
+
config = context.animation_config
336
336
+
if duration is None and config is not None:
337
337
+
duration = config.duration
335
338
if duration is None:
336
339
raise ValueError('unknown animation duration, specify duration')
340
340
+
if config is None:
341
341
+
config = native_animation.SyncedAnimationConfig(duration)
337
342
frames = []
338
343
for i in range(int(duration * fps + 1)):
339
344
time = i / fps
340
345
frame_context = dataclasses.replace(
341
346
context,
342
347
animation_config=dataclasses.replace(
343
343
-
context.animation_config,
348
348
+
config,
344
349
freeze_frame_at=time,
345
350
show_playback_controls=False))
346
351
frames.append(self.display_inline(context=frame_context))
347
352
return frames
348
348
-
def save_gif(self, fname, fps=10, duration=None, context=None):
349
349
-
self.as_gif(fname, fps=fps, duration=duration, context=context)
350
350
-
def save_mp4(self, fname, fps=10, duration=None, context=None):
351
351
-
self.as_mp4(fname, fps=fps, duration=duration, context=context)
353
353
+
def save_video(self, fname, fps=10, duration=None, mime_type=None,
354
354
+
file_type=None, context=None, verbose=False):
355
355
+
self.as_video(
356
356
+
fname, fps=fps, duration=duration, mime_type=mime_type,
357
357
+
file_type=file_type, context=context, verbose=verbose)
358
358
+
def save_gif(self, fname, fps=10, duration=None, context=None,
359
359
+
verbose=False):
360
360
+
self.as_gif(
361
361
+
fname, fps=fps, duration=duration, context=context,
362
362
+
verbose=verbose)
363
363
+
def save_mp4(self, fname, fps=10, duration=None, context=None,
364
364
+
verbose=False):
365
365
+
self.as_mp4(
366
366
+
fname, fps=fps, duration=duration, context=context,
367
367
+
verbose=verbose)
352
368
def as_video(self, to_file=None, fps=10, duration=None,
353
353
-
mime_type=None, file_type=None, context=None, verbose=False):
369
369
+
mime_type=None, file_type=None, context=None, verbose=False):
354
370
if file_type is None and mime_type is None:
355
371
if to_file is None or '.' not in str(to_file):
356
372
file_type = 'mp4'