3 from xml.etree
import ElementTree
5 from .base
import importer
6 from ..parsers.svg.importer
import SvgParser
9 ns =
"{%s}" %
"http://www.calligra.org/DTD/krita"
13 return string.format(ns=ns)
16 def _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":
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))
28 warnings.warn(
"Unsupported krita layer %s" % nodetype)
31 layer.name = xml_layer.attrib[
"name"]
32 if xml_layer.attrib[
"visible"] == 0:
33 layer.transform.opacity.value = 0
37 @importer("Krita", ["kra"])
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
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"]
54 parser.dpi =
int(image.attrib[
"x-res"])
56 _import_layers(zf, animation, image, parser,
None)
Top level object, describing the animation.
Layer with no data, useful to group layers together.