-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathsvg2png-batch
executable file
·73 lines (60 loc) · 2.16 KB
/
svg2png-batch
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#!/usr/bin/python3
import sys
import os
import os.path
import subprocess
from shutil import copyfile
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('svg_file', help='input svg file')
default_output_pattern = 'icons/hicolor/<size2>/apps'
default_sizes = '16,22,24,32,48,64,96,128,scalable'
parser.add_argument('-s', '--sizes',
dest='sizes',
default=default_sizes,
help='the list of sizes to export, comma split, default: %s' % default_sizes
)
parser.add_argument('-o', '--output-pattern',
dest='output_pattern',
metavar='PATTERN',
default= default_output_pattern,
help=('the output file path pattern, must contain <size1> or <size2> mark, ' +
'<size1> will be replaced with a single number, ' +
'and <size2> will be replaced with number x number. ' +
'default: %s') % default_output_pattern
)
args = parser.parse_args()
svg_file = args.svg_file
output_pattern = args.output_pattern
sizes=args.sizes.split(',')
name = os.path.splitext(os.path.basename(svg_file))[0]
def svg2png(svg_file, output, size):
subprocess.run(['rsvg-convert', '-w', str(size), '-h', str(size), '-o', output, svg_file ])
def get_filename(pattern, size, name):
if size == 'scalable':
size1 = size
size2 = size
else:
# size is num
size1 = size
size2 = size + 'x' + size
if '<size1>' in pattern:
pattern = pattern.replace('<size1>', size1, 1)
elif '<size2>' in pattern:
pattern = pattern.replace('<size2>', size2, 1)
else:
raise Exception('no found <sizeX> in pattern %s' % pattern)
return os.path.join(pattern, name)
if __name__ == '__main__':
print("src ", svg_file, os.path.getsize(svg_file))
for size in sizes:
ext = '.png'
if size == 'scalable':
ext = '.svg'
output = get_filename(output_pattern, size , name + ext)
os.makedirs( os.path.dirname(output), mode=0o755, exist_ok=True)
if ext == '.png':
svg2png(svg_file, output, int(size))
else:
copyfile(svg_file, output)
print(output, os.path.getsize(output))