shithub: pokecrystal

ref: 0aadbec02a3a26fbad302cc56b841f3bd987370c
dir: /tools/rgb555.py/

View raw version
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
Usage: python rgb555.py image.png

Round all colors of the input image to RGB555.
"""

import sys

import png

def rgb8_to_rgb5(c):
	return (c & 0b11111000) | (c >> 5)

def round_pal(filename):
	with open(filename, 'rb') as file:
		width, height, rows = png.Reader(file).asRGBA8()[:3]
		rows = list(rows)
	for row in rows:
		del row[3::4]
	rows = [[rgb8_to_rgb5(c) for c in row] for row in rows]
	writer = png.Writer(width, height, greyscale=False, bitdepth=8, compression=9)
	with open(filename, 'wb') as file:
		writer.write(file, rows)

def main():
	if len(sys.argv) < 2:
		print(f'Usage: {sys.argv[0]} pic.png', file=sys.stderr)
		sys.exit(1)
	for filename in sys.argv[1:]:
		if not filename.lower().endswith('.png'):
			print(f'{filename} is not a .png file!', file=sys.stderr)
		round_pal(filename)

if __name__ == '__main__':
	main()