python-lottie  0.7.0+dev66cafb9
A framework to work with lottie files and telegram animated stickers (tgs)
cairo.py
Go to the documentation of this file.
1 try:
2  import cairosvg
3  has_cairo = True
4 except (ImportError, OSError):
5  has_cairo = False
6 
7 from ..parsers import glaxnimate_helpers
8 
9 import io
10 
11 from .base import exporter
12 from .svg import export_svg
13 
14 
15 if glaxnimate_helpers.has_glaxnimate:
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 
29 elif has_cairo:
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.animationanimation = animation
43  self.dpidpi = 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)
def serialize(self, frame, file)
Definition: cairo.py:51
def __init__(self, animation, dpi)
Definition: cairo.py:41
def __exit__(self, *a, **k)
Definition: cairo.py:48
def export_ps(animation, fp, frame=0, dpi=96)
Definition: cairo.py:59
def export_png(animation, fp, frame=0, dpi=96)
Definition: cairo.py:17
def export_pdf(animation, fp, frame=0, dpi=96)
Definition: cairo.py:55
def PngRenderer(animation, dpi)
Definition: cairo.py:26
def export_svg(animation, file, frame=0, pretty=True, animated=False)
Definition: svg.py:23