Coverage for lib/lottie/importers/krita.py: 0%
41 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
1import zipfile
2import warnings
3from xml.etree import ElementTree
5from .base import importer
6from ..parsers.svg.importer import SvgParser
7from .. import objects
9ns = "{%s}" % "http://www.calligra.org/DTD/krita"
12def _ns(string):
13 return string.format(ns=ns)
16def _import_layers(zf, animation, xml_parent, svg_parser, parent):
17 for xml_layer in xml_parent.findall(_ns("./{ns}layers/{ns}layer")):
18 nodetype = xml_layer.attrib["nodetype"]
20 if nodetype == "grouplayer":
21 layer = animation.add_layer(objects.NullLayer())
22 _import_layers(zf, animation, xml_layer, svg_parser, layer)
23 elif nodetype == "shapelayer":
24 filename = "%s/layers/%s.shapelayer/content.svg" % (animation.name, xml_layer.attrib["filename"])
25 with zf.open(filename) as svg_tree:
26 layer = svg_parser.etree_to_layer(animation, ElementTree.parse(svg_tree))
27 else:
28 warnings.warn("Unsupported krita layer %s" % nodetype)
29 continue
31 layer.name = xml_layer.attrib["name"]
32 if xml_layer.attrib["visible"] == 0:
33 layer.transform.opacity.value = 0
34 layer.parent = parent
37@importer("Krita", ["kra"])
38def import_krita(file):
39 with zipfile.ZipFile(file) as zf:
40 with zf.open("maindoc.xml") as main:
41 main_xml = ElementTree.parse(main)
43 image = main_xml.find(_ns("./{ns}IMAGE"))
44 fps = float(main_xml.find(_ns("./{ns}IMAGE/{ns}animation/{ns}framerate")).attrib["value"])
45 framerange = main_xml.find(_ns("./{ns}IMAGE/{ns}animation/{ns}range")).attrib
47 animation = objects.Animation(int(framerange["to"]), fps)
48 animation.in_point = int(framerange["from"])
49 animation.width = int(image.attrib["width"])
50 animation.height = int(image.attrib["height"])
51 animation.name = image.attrib["name"]
53 parser = SvgParser()
54 parser.dpi = int(image.attrib["x-res"])
56 _import_layers(zf, animation, image, parser, None)
58 return animation