wcs/wcs/qommon/static/images/categories/generate.py

109 lines
3.4 KiB
Python

#! /usr/bin/env python
import os
from optparse import OptionParser
import subprocess
import tempfile
import xml.etree.ElementTree as ET
import re
from PIL import Image
from PIL import PngImagePlugin
mapping = {
'207': 'trash',
'1673': 'businessperson',
'4335': 'sanitation',
'6412': 'mobile-alarm',
'8686': 'misc',
'10860': 'triathlon',
'12513': 'email',
'12246': 'park',
'13644': 'culture',
'14004': 'document',
'14292': 'polling-place',
'23557': 'crosswalk',
'32231': 'document',
'38588': 'shopping-cart',
'39826': 'people',
'39567': 'tools',
'40124': 'consultation',
'49638': 'event',
'58303': 'placeholder',
'62444': 'fireworks',
'64055': 'association',
'79187': 'venue',
'64233': 'convention-center',
'22637': 'tourist',
'168700': 'payment',
}
parser = OptionParser()
parser.add_option('-c', '--colour', dest='colour', metavar='COLOUR')
(options, args) = parser.parse_args()
for icon_id, icon_name in mapping.items():
svg_path = 'src/icon_%s/' % icon_id
svg_path = os.path.join(svg_path, [x for x in os.listdir(svg_path) if x.endswith('.svg')][0])
if options.colour:
tree = ET.fromstring(open(svg_path).read().replace('#000000', '#%s' % options.colour))
for elem in tree.findall('*'):
if not elem.attrib.get('style'):
elem.attrib['style'] = 'fill:#%s' % options.colour
else:
tree = ET.fromstring(open(svg_path).read())
author = None
for elem in tree:
if elem.tag == '{http://www.w3.org/2000/svg}text' and elem.text.startswith('Created by'):
author = elem.text[len('Created by')+1:]
tree.remove(elem)
for elem in tree:
if elem.tag == '{http://www.w3.org/2000/svg}text' and 'Noun Project' in elem.text:
tree.remove(elem)
f = tempfile.NamedTemporaryFile(suffix='.svg', delete=False)
f.write(ET.tostring(tree))
f.close()
svg_path = f.name
if options.colour:
output_filename = 'icon_%s_%s_%s.png' % (icon_name, icon_id, options.colour)
else:
output_filename = 'icon_%s_%s.png' % (icon_name, icon_id)
subprocess.call(['inkscape', '--without-gui',
'--file', svg_path,
'--export-png', output_filename,
'--export-area-drawing',
'--export-area-snap',
'--export-width', '42'])
# write down licensing info in the png file
meta = PngImagePlugin.PngInfo()
if os.path.exists('src/icon_%s/license.txt' % icon_id):
license_txt = open('src/icon_%s/license.txt' % icon_id).read()
try:
meta.add_text('Author', re.findall('by(.*)', license_txt)[0], 0)
except IndexError:
pass
license_txt = license_txt.replace('\n', ' ')
for license in ['Public Domain', 'Creative Commons Attribution']:
if license in license_txt:
meta.add_text('Licence', license, 0)
break
else:
print >> sys.stderr, 'Warning: no license known for', svg_path
else:
# new noun project icon format, they do not specify a license, assume
# Creative Commons Attribution
license = 'Creative Commons Attribution'
meta.add_text('Licence', license, 0)
if author:
try:
meta.add_text('Author', author)
except IndexError:
pass
png_file = Image.open(output_filename)
png_file.save(output_filename, "PNG", pnginfo=meta)