diff options
| author | lizzie <lizzie@eden-emu.dev> | 2025-10-14 20:47:17 +0200 |
|---|---|---|
| committer | crueter <crueter@eden-emu.dev> | 2025-10-14 20:47:17 +0200 |
| commit | ac59b6eae5685956a80ef2bf38e2325705b0aea5 (patch) | |
| tree | 2f398e80c12261d4854966e118912a3fedac3a0f /tools/VectorDrawable2Svg.py | |
| parent | b389a7269794fe9aa8e34faa821659f07ce3f369 (diff) | |
[android] Android 7.0 support (#2654)
Signed-off-by: lizzie <lizzie@eden-emu.dev>
Co-authored-by: crueter <crueter@eden-emu.dev>
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2654
Reviewed-by: MaranBr <maranbr@eden-emu.dev>
Co-authored-by: lizzie <lizzie@eden-emu.dev>
Co-committed-by: lizzie <lizzie@eden-emu.dev>
Diffstat (limited to 'tools/VectorDrawable2Svg.py')
| -rw-r--r-- | tools/VectorDrawable2Svg.py | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/tools/VectorDrawable2Svg.py b/tools/VectorDrawable2Svg.py new file mode 100644 index 0000000000..20f168e1aa --- /dev/null +++ b/tools/VectorDrawable2Svg.py @@ -0,0 +1,86 @@ +#!/usr/bin/env python2 +""" +VectorDrawable2Svg +This script convert your VectorDrawable to a Svg +Author: Alessandro Lucchet + +Usage: drop one or more vector drawable onto this script to convert them to svg format +""" + +from xml.dom.minidom import * +import sys + +# extracts all paths inside vdContainer and add them into svgContainer +def convertPaths(vdContainer,svgContainer,svgXml): + vdPaths = vdContainer.getElementsByTagName('path') + for vdPath in vdPaths: + # only iterate in the first level + if vdPath.parentNode == vdContainer: + svgPath = svgXml.createElement('path') + svgPath.attributes['d'] = vdPath.attributes['android:pathData'].value + if vdPath.hasAttribute('android:fillColor'): + svgPath.attributes['fill'] = vdPath.attributes['android:fillColor'].value + else: + svgPath.attributes['fill'] = 'none' + if vdPath.hasAttribute('android:strokeLineJoin'): + svgPath.attributes['stroke-linejoin'] = vdPath.attributes['android:strokeLineJoin'].value + if vdPath.hasAttribute('android:strokeLineCap'): + svgPath.attributes['stroke-linecap'] = vdPath.attributes['android:strokeLineCap'].value + if vdPath.hasAttribute('android:strokeMiterLimit'): + svgPath.attributes['stroke-miterlimit'] = vdPath.attributes['android:strokeMiterLimit'].value + if vdPath.hasAttribute('android:strokeWidth'): + svgPath.attributes['stroke-width'] = vdPath.attributes['android:strokeWidth'].value + if vdPath.hasAttribute('android:strokeColor'): + svgPath.attributes['stroke'] = vdPath.attributes['android:strokeColor'].value + svgContainer.appendChild(svgPath); + +# define the function which converts a vector drawable to a svg +def convertVd(vdFilePath): + + # create svg xml + svgXml = Document() + svgNode = svgXml.createElement('svg') + svgXml.appendChild(svgNode); + + # open vector drawable + vdXml = parse(vdFilePath) + vdNode = vdXml.getElementsByTagName('vector')[0] + + # setup basic svg info + svgNode.attributes['xmlns'] = 'http://www.w3.org/2000/svg' + svgNode.attributes['width'] = vdNode.attributes['android:viewportWidth'].value + svgNode.attributes['height'] = vdNode.attributes['android:viewportHeight'].value + svgNode.attributes['viewBox'] = '0 0 {} {}'.format(vdNode.attributes['android:viewportWidth'].value, vdNode.attributes['android:viewportHeight'].value) + + # iterate through all groups + vdGroups = vdXml.getElementsByTagName('group') + for vdGroup in vdGroups: + + # create the group + svgGroup = svgXml.createElement('g') + + # setup attributes of the group + if vdGroup.hasAttribute('android:translateX'): + svgGroup.attributes['transform'] = 'translate({},{})'.format(vdGroup.attributes['android:translateX'].value,vdGroup.attributes['android:translateY'].value) + + # iterate through all paths inside the group + convertPaths(vdGroup,svgGroup,svgXml) + + # append the group to the svg node + svgNode.appendChild(svgGroup); + + # iterate through all svg-level paths + convertPaths(vdNode,svgNode,svgXml) + + # write xml to file + svgXml.writexml(open(vdFilePath + '.svg', 'w'),indent="",addindent=" ",newl='\n') + +# script begin +if len(sys.argv)>1: + iterArgs = iter(sys.argv) + next(iterArgs) #skip the first entry (it's the name of the script) + for arg in iterArgs: + convertVd(arg) +else: + print("You have to pass me something") + sys.exit() |
