View Single Post
Old October 29, 2019, 04:25   #6
Bill Peterson
Apprentice
 
Join Date: Jul 2007
Location: Flyover country
Posts: 97
Bill Peterson is on a distinguished road
Send a message via AIM to Bill Peterson
Quote:
Originally Posted by takkaria View Post
Yes please!
Since they're so small I'll just quote them here rather than attaching files
Here's the code for splitting a tileset into individual images
Code:
'''
Created on Oct 23, 2019

@author: William Peterson

Created for Python 3.7 and Pillow 6.2
but should work with Python > 3.0 and a compatible version of Pillow


'''

from PIL import Image

tiles = Image.open('32x32.png')
print(tiles.mode,tiles.size)

for i in range(0x80, 0x100):
    for j in range(0x80, 0x9e):
        part = tiles.crop(((i-0x80)*32, (j-0x80)*32, (i-0x7f)*32, (j-0x7f)*32))

        part.save('{}-{}.png'.format(hex(j),hex(i)))
and here's the code for reassembling the file
Code:
'''
Created on Oct 24, 2019

@author: William Peterson


Created for Python 3.7 and Pillow 6.2
but should work with Python > 3.0 and a compatible version of Pillow


'''
from PIL import Image

whole = Image.new('RGBA',(4096,960))

for i in range(0x80, 0x100):
    for j in range(0x80, 0x9e):
        tile = Image.open('{}-{}.png'.format(hex(j),hex(i)))
         
        whole.paste(tile, ((i-0x80)*32, (j-0x80)*32, (i-0x7f)*32, (j-0x7f)*32))

print (whole.size)
whole.save('32x32test.png')
These should work for any rectangular tileset composed of square tiles, you just have to change the indexes. Since I was working with Angband .prf files I did all the indexing in hex, with the upper left corner being 0x80:0x80. Let me know if you have any questions.
Bill Peterson is offline   Reply With Quote