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

1try: 

2 import cairosvg 

3 has_cairo = True 

4except (ImportError, OSError): 

5 has_cairo = False 

6 

7from ..parsers import glaxnimate_helpers 

8 

9import io 

10 

11from .base import exporter 

12from .svg import export_svg 

13 

14 

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") 

19 

20 if isinstance(fp, str): 

21 with open(fp, 'wb') as file: 

22 file.write(data) 

23 else: 

24 fp.write(data) 

25 

26 def PngRenderer(animation, dpi): 

27 return glaxnimate_helpers.GlaxnimateRenderer(animation, "raster", dpi) 

28 

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) 

35 

36 @exporter("PNG", ["png"], [], {"frame"}) 

37 def export_png(animation, fp, frame=0, dpi=96): 

38 _export_cairo(cairosvg.svg2png, animation, fp, frame, dpi) 

39 

40 class PngRenderer: 

41 def __init__(self, animation, dpi): 

42 self.animation = animation 

43 self.dpi = dpi 

44 

45 def __enter__(self): 

46 return self 

47 

48 def __exit__(self, *a, **k): 

49 return 

50 

51 def serialize(self, frame, file): 

52 export_png(self.animation, file, frame, self.dpi) 

53 

54 @exporter("PDF", ["pdf"], [], {"frame"}) 

55 def export_pdf(animation, fp, frame=0, dpi=96): 

56 _export_cairo(cairosvg.svg2pdf, animation, fp, frame, dpi) 

57 

58 @exporter("PostScript", ["ps"], [], {"frame"}) 

59 def export_ps(animation, fp, frame=0, dpi=96): 

60 _export_cairo(cairosvg.svg2ps, animation, fp, frame, dpi)