-
Notifications
You must be signed in to change notification settings - Fork 1
/
riff2png.py
52 lines (40 loc) · 2.02 KB
/
riff2png.py
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
# This converts RIFF palette files to PNGs, turning the index map
# into a 256-colour table that you'd use in UNIB.
# As far as I know, this is only useful for if you want to convert
# palettes from older Melty Blood games, which have been extracted
# and posted to The Spriter's Resource under PS2, but not as PNGs.
# This should do the work for you and give you your 36 colours.
# Feel free to edit it for other palette formats. Maybe I'll turn
# this into a gist, but I don't know what other purposes you'd use it.
# Many thanks to the contributors of the wiki here: https://worms2d.info/Palette_file
# TRANSPARENCY : Done by AI.
import os
from PIL import Image
def riff_to_png(input_file, output_file):
colors = []
with open(input_file, 'rb') as f:
riff = f.read(4).decode('utf-8') # Riff header
dataSize = int.from_bytes(f.read(4), byteorder='little')
type = f.read(4).decode('utf-8')
chunkType = f.read(4).decode('utf-8') # Chunk reads
chunkSize = int.from_bytes(f.read(4), byteorder='little')
palVersion = int.from_bytes(f.read(2), byteorder='little')
palEntries = int.from_bytes(f.read(2), byteorder='little')
for i in range(palEntries): # Colour reads
red = int.from_bytes(f.read(1), byteorder='little')
green = int.from_bytes(f.read(1), byteorder='little')
blue = int.from_bytes(f.read(1), byteorder='little')
flags = int.from_bytes(f.read(1), byteorder='little')
colors.append((red, green, blue)) # Add colour to list
img = Image.new('P', (palEntries, 1)) # 8bit image
img.putdata(list(range(palEntries))) # Set pixels to index
img.putpalette(sum(colors, ())) # Set image contents to palette
img.save(output_file, 'PNG')
def convert_pals():
for file in os.listdir():
if file.endswith(".pal"):
input_file = file
output_file = os.path.splitext(file)[0] + ".png"
riff_to_png(input_file, output_file)
if __name__ == "__main__":
convert_pals()