diff options
| -rwxr-xr-x | tools/palfix.py | 24 |
1 files changed, 5 insertions, 19 deletions
diff --git a/tools/palfix.py b/tools/palfix.py index e7841958..3a997d54 100755 --- a/tools/palfix.py +++ b/tools/palfix.py @@ -4,10 +4,9 @@ """ Usage: python palfix.py image.png -Fix the palette format of the input image. Colored images (Gen 2 Pokémon or -trainer sprites) will become indexed, with a palette sorted {white, light -color, dark color, black}. Grayscale images (all Gen 1 images) will become -two-bit grayscale. +Fix the palette format of the input image to two-bit grayscale. +Colored images will have their palette sorted {white, light +color, dark color, black}. """ import sys @@ -18,10 +17,6 @@ def rgb8_to_rgb5(c): r, g, b = c return (r // 8, g // 8, b // 8) -def rgb5_to_rgb8(c): - r, g, b = c - return (r * 8 + r // 4, g * 8 + g // 4, b * 8 + b // 4) - def invert(c): r, g, b = c return (31 - r, 31 - g, 31 - b) @@ -33,10 +28,6 @@ def luminance(c): def rgb5_pixels(row): yield from (rgb8_to_rgb5(row[x:x+3]) for x in range(0, len(row), 4)) -def is_grayscale(palette): - return (palette == ((31, 31, 31), (21, 21, 21), (10, 10, 10), (0, 0, 0)) or - palette == ((31, 31, 31), (20, 20, 20), (10, 10, 10), (0, 0, 0))) - def fix_pal(filename): with open(filename, 'rb') as file: width, height, rows = png.Reader(file).asRGBA8()[:3] @@ -52,13 +43,8 @@ def fix_pal(filename): return False palette = tuple(sorted(colors | b_and_w, key=luminance, reverse=True)) assert len(palette) == 4 - rows = [list(map(palette.index, rgb5_pixels(row))) for row in rows] - if is_grayscale(palette): - rows = [[3 - c for c in row] for row in rows] - writer = png.Writer(width, height, greyscale=True, bitdepth=2, compression=9) - else: - palette = tuple(map(rgb5_to_rgb8, palette)) - writer = png.Writer(width, height, palette=palette, bitdepth=8, compression=9) + rows = [[3 - palette.index(c) for c in rgb5_pixels(row)] for row in rows] + writer = png.Writer(width, height, greyscale=True, bitdepth=2, compression=9) with open(filename, 'wb') as file: writer.write(file, rows) return True |
