Browse Source
script to make <26 sdk icon
script to make <26 sdk icon
Signed-off-by: crueter <crueter@eden-emu.dev>pull/2654/head
3 changed files with 112 additions and 0 deletions
-
BINsrc/android/app/src/main/res/drawable/ic_launcher.png
-
86tools/VectorDrawable2Svg.py
-
26tools/generate-legacy-icons.sh
|
Before Width: 72 | Height: 72 | Size: 2.2 KiB After Width: 512 | Height: 512 | Size: 48 KiB |
@ -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() |
|||
@ -0,0 +1,26 @@ |
|||
#!/bin/sh -e |
|||
|
|||
# Generate SDK <26 icons for android |
|||
# requires imagemagick, inkscape |
|||
|
|||
ROOTDIR=$PWD |
|||
|
|||
cd src/android/app/src/main |
|||
|
|||
pushd res/drawable |
|||
# convert vector to svg--needed to generate launcher png |
|||
cp ic_yuzu_icon.xml tmp |
|||
|
|||
python3 $ROOTDIR/tools/VectorDrawable2Svg.py tmp |
|||
|
|||
inkscape -w 768 -h 768 tmp.svg -o ic_tmp.png |
|||
magick ic_icon_bg_orig.png -resize 512x512 bg_tmp.png |
|||
|
|||
magick bg_tmp.png -strip -type TrueColor -depth 8 -colorspace sRGB -color-matrix "1 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0" bg_tmp_rgb.png |
|||
magick -verbose bg_tmp_rgb.png ic_tmp.png -gravity center -composite -colorspace sRGB ic_launcher.png |
|||
echo |
|||
|
|||
rm *tmp* |
|||
popd |
|||
|
|||
# Add legacy here when legacy gets merged |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue