Coverage for lib/lottie/exporters/cairo.py: 24%
44 statements
« prev ^ index » next coverage.py v7.2.2, created at 2023-03-20 16:17 +0100
« prev ^ index » next coverage.py v7.2.2, created at 2023-03-20 16:17 +0100
1try:
2 import cairosvg
3 has_cairo = True
4except (ImportError, OSError):
5 has_cairo = False
7from ..parsers import glaxnimate_helpers
9import io
11from .base import exporter
12from .svg import export_svg
15if glaxnimate_helpers.has_glaxnimate: 15 ↛ 16line 15 didn't jump to line 16, because the condition on line 15 was never true
16 @exporter("PNG", ["png"], [], {"frame"})
17 def export_png(animation, fp, frame=0, dpi=96):
18 data = glaxnimate_helpers.serialize(animation, "raster")
20 if isinstance(fp, str):
21 with open(fp, 'wb') as file:
22 file.write(data)
23 else:
24 fp.write(data)
26 def PngRenderer(animation, dpi):
27 return glaxnimate_helpers.GlaxnimateRenderer(animation, "raster", dpi)
29elif has_cairo: 29 ↛ 30line 29 didn't jump to line 30, because the condition on line 29 was never true
30 def _export_cairo(func, animation, fp, frame, dpi):
31 intermediate = io.BytesIO()
32 export_svg(animation, intermediate, frame, pretty=False)
33 intermediate.seek(0)
34 func(file_obj=intermediate, write_to=fp, dpi=dpi)
36 @exporter("PNG", ["png"], [], {"frame"})
37 def export_png(animation, fp, frame=0, dpi=96):
38 _export_cairo(cairosvg.svg2png, animation, fp, frame, dpi)
40 class PngRenderer:
41 def __init__(self, animation, dpi):
42 self.animation = animation
43 self.dpi = dpi
45 def __enter__(self):
46 return self
48 def __exit__(self, *a, **k):
49 return
51 def serialize(self, frame, file):
52 export_png(self.animation, file, frame, self.dpi)
54 @exporter("PDF", ["pdf"], [], {"frame"})
55 def export_pdf(animation, fp, frame=0, dpi=96):
56 _export_cairo(cairosvg.svg2pdf, animation, fp, frame, dpi)
58 @exporter("PostScript", ["ps"], [], {"frame"})
59 def export_ps(animation, fp, frame=0, dpi=96):
60 _export_cairo(cairosvg.svg2ps, animation, fp, frame, dpi)