Improved generator code; also a utility which will print out indexes for the palette used in a spritesheet.
Code: Select all
import Image
import ImageDraw
spritesheet = Image.open('test_input.png')
spritesheetpx = spritesheet.load()
draw = ImageDraw.Draw(spritesheet)
# global constants
body_colour = 10
cc_colour = 202
#each sequence is a tuple containing lists in format: [(x-offset,y-offset), colour]
pixel_sequences = dict (
body_outer = ([(0, 0), body_colour], [(0, 1), cc_colour], [(0, 2), body_colour], [(0, 3), body_colour], [(0, 4), 14]),
body_end = ([(0, 0), body_colour], [(0, 1), cc_colour], [(0, 2), body_colour], [(0, 3), body_colour], [(0, 4), 14]),
body_inner = ([(0, 0), 16], [(0, 1), 17], [(0, 2), 18], [(0, 3), 19], [(0, 4), 14]),
)
key_colour_mapping = {
209 : dict(seq = 'body_inner', colour_shift= 0),
238 : dict(seq = 'body_outer', colour_shift = 0),
240 : dict(seq = 'body_end', colour_shift = -1),
}
def get_pixel_sequence(x, y, key_colour):
key_map = key_colour_mapping[key_colour]
raw_sequence = pixel_sequences[key_map['seq']]
pixel_sequence = []
for i in raw_sequence:
pixel_sequence.append({
'x' : x + i[0][0],
'y' : y - i[0][1],
'colour' : i[1] + key_map['colour_shift'],
})
return pixel_sequence
colours = {} #used for debug
for x in range(spritesheet.size[0]):
for y in range(spritesheet.size[1]):
colour = spritesheetpx[x,y]
if colour != 255 and colour != 0 and colour != 15:
colours[colour] = ''
if spritesheetpx[x,y] in key_colour_mapping.keys():
seq = get_pixel_sequence(x, y, spritesheetpx[x,y])
for i in seq:
draw.point([(i['x'],i['y'])], fill=i['colour'])
spritesheet.save('a_test_trailer.png')
print colours # debug: what colours did we find in this spritesheet?
Palette Utility
Code: Select all
import Image
import ImageDraw
import ImagePalette
spritesheet = Image.open('test_input.png')
block_size = 30
palette_key = Image.new('P',(16*block_size,16*block_size))
draw = ImageDraw.Draw(palette_key)
print spritesheet.mode
palette_key.putpalette(spritesheet.palette)
x = 0
y = 0
for i in range (256):
draw.rectangle([(x,y),(x+block_size,y+block_size)],fill=i)
bg_size = draw.textsize(str(i))
text_pos = (x+(block_size/4),y+(block_size/3))
draw.rectangle([(text_pos[0]-1,text_pos[1]+1),(text_pos[0]+bg_size[0],text_pos[1]+bg_size[1]-2)],fill=255)
draw.text((x+(block_size/4),y+(block_size/3)),str(i),fill=1)
x = x+block_size
if x == 16*block_size:
x = 0
y = y + block_size
palette_key.save('palette_key.png')