aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRangi42 <remy.oukaour+rangi42@gmail.com>2023-11-20 19:05:09 -0500
committerRangi42 <remy.oukaour+rangi42@gmail.com>2023-11-20 19:05:09 -0500
commite8868d53e929e451c699a2ee491569d49fd9050a (patch)
tree3b862917e7206d5842b7d39de9e7a0c71e4aa176
parentIdentify `wSavedCoordIndex` and its other usages (diff)
downloadpokeyellow-e8868d53e929e451c699a2ee491569d49fd9050a.tar.gz
pokeyellow-e8868d53e929e451c699a2ee491569d49fd9050a.tar.xz
pokeyellow-e8868d53e929e451c699a2ee491569d49fd9050a.zip
Have palfix.py always output grayscale
Fixes #431
-rwxr-xr-xtools/palfix.py24
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