source: regenerate-pngs.py @ 244:7024d48c41c2

Last change on this file since 244:7024d48c41c2 was 244:7024d48c41c2, checked in by Adrianna Pińska <adrianna.pinska@…>, 11 years ago

weapon layering with wing / eye

  • Property exe set to *
File size: 3.3 KB
Line 
1#!/usr/bin/env python
2
3import cairo
4import rsvg
5import os
6from Image import open
7
8def svg_to_png(svg_name, png_name, w, h):
9    """Convert an SVG file to a PNG file."""
10    print "Generating %s at %dx%d..." % (png_name, w, h)
11    r = rsvg.Handle(svg_name)
12
13    scale = max(float(r.props.width) / w, float(r.props.height) / h)
14    scale = 1.0 / scale
15
16    r.props.dpi_x = r.props.dpi_x / scale
17    r.props.dpi_y = r.props.dpi_y / scale
18
19    cs = cairo.ImageSurface(cairo.FORMAT_ARGB32, w, h)
20    ctx = cairo.Context(cs)
21    ctx.scale(scale, scale)
22    r.render_cairo(ctx)
23    cs.write_to_png(png_name)
24
25def process_svg_folder(path, width, height):
26    for dirpath, dirnames, filenames in os.walk(path):
27        for filename in filenames:
28            basename, ext = os.path.splitext(filename)
29            if ext == ".svg":
30                svg_name = os.path.join(dirpath, basename + ".svg")
31                png_name = os.path.join(dirpath, basename + ".png")
32                svg_to_png(svg_name, png_name, width, height)
33
34def process_sprite(name, width, height, sprite_path):
35    svg_name = os.path.join(sprite_path, name) + ".svg"
36    png_name = os.path.join(sprite_path, name) + ".png"
37    svg_to_png(svg_name, png_name, width, height)
38
39def process_cursor(name, width, height, sprite_path, cursor_path):
40    # We bounce through png to get something PIL understands
41    svg_name = os.path.join(sprite_path, name) + '.svg'
42    png_name = os.path.join(cursor_path, name) + '.png'
43    xbm_name = os.path.join(cursor_path, name) + '.xbm'
44    svg_to_png(svg_name, png_name, width, height)
45    # We need to bounce through 'L' first to handle transparency OK
46    pixeldata = open(png_name).convert('L')
47    # Everything > 0 goes to white
48    lut = [0] + [1]*255
49    pixeldata.point(lut, mode='1').save(xbm_name)
50    os.remove(png_name)
51
52if __name__ == "__main__":
53    tile_path = "data/tiles"
54    sprite_path = "data/sprites"
55    image_path = "data/images"
56    cursor_path = "data/cursors"
57    sprites = [
58        ("chkn", 20, 20),
59        ("wing", 20, 20),
60        ("eye", 20, 20),
61        ("select_chkn", 20, 20),
62        ("chkn_death", 20, 20),
63        ("egg", 20, 20),
64        ("fox", 20, 20),
65        ("fox_death", 20, 20),
66        ("ninja_fox", 20, 20),
67        ("sapper_fox", 20, 20),
68        ("equip_rifle", 20, 20),
69        ("equip_knife", 20, 20),
70        ("muzzle_flash", 20, 20),
71        ("equip_kevlar", 20, 20),
72        ("equip_helmet", 20, 20),
73        ("henhouse", 60, 40),
74        ("select_henhouse", 60, 40),
75        ("hendominium", 40, 60),
76        ("select_hendominium", 40, 60),
77        ("watchtower", 40, 40),
78        ("select_watchtower", 40, 40),
79        ("nest", 20, 20),
80        ("equip_egg", 20, 20),
81        ("rinkhals", 20, 20),
82    ]
83
84    cursors = [
85        ("chkn", 16, 16),
86        ("equip_knife", 16, 16),
87        ("equip_rifle", 16, 16),
88        ("egg", 16, 16),
89        ]
90
91    process_svg_folder("data/tiles", 20, 20)
92    process_svg_folder("data/icons", 40, 40)
93    for name, width, height in sprites:
94        process_sprite(name, width, height, sprite_path)
95    process_sprite("splash", 800, 600, image_path)
96    process_sprite("gameover_win", 800, 600, image_path)
97    process_sprite("gameover_lose", 800, 600, image_path)
98    for name, width, height in cursors:
99        process_cursor(name, width, height, sprite_path, cursor_path)
Note: See TracBrowser for help on using the repository browser.