57 lines
1.8 KiB
Python
57 lines
1.8 KiB
Python
from colorconv import determine_format, convert_color, total_format_bytes
|
|
import sys
|
|
from PIL import Image
|
|
|
|
def print_usage():
|
|
print("Usage: colorconv.py <to> <image>")
|
|
print("")
|
|
print(" <to>: The color format to convert to.")
|
|
print(" <image>: The color to convert the format of.")
|
|
print("")
|
|
print(" Color formats are formatted as their individual channels.")
|
|
print(" Ex.")
|
|
print(" r8g8b8")
|
|
print(" r5g6b5")
|
|
print("")
|
|
print(" Image data is represented as a path to an image file.")
|
|
print(" The output is printed code that represents the sprite.")
|
|
|
|
def convert_image(format_out: tuple[int, int, int], image: Image.Image) -> str:
|
|
output = "{\n"
|
|
counter = 0
|
|
size = image.size[0] * image.size[1]
|
|
pixels = image.getdata()
|
|
formatter: str = "0x{:0" + str(total_format_bytes(format_out) * 2) + "X}"
|
|
for y in range(image.size[1]):
|
|
output += " "
|
|
for x in range(image.size[0]):
|
|
num = convert_color([8, 8, 8], format_out, pixels[y * image.size[0] + x])
|
|
output += formatter.format(num)
|
|
if counter < size - 1: output += ", "
|
|
counter += 1
|
|
output += "\n"
|
|
output += "}"
|
|
return output
|
|
|
|
def main(argv: list[str]):
|
|
argc: int = len(argv)
|
|
if argc < 3:
|
|
print_usage()
|
|
return
|
|
elif argc > 3:
|
|
print("Too many arguments!\n")
|
|
print_usage()
|
|
return
|
|
|
|
# The first argument is this file. Happens when calling python.exe.
|
|
format_out_str: str = argv[1]
|
|
image_path: str = argv[2]
|
|
|
|
format_out: tuple[int, int, int] = determine_format(format_out_str)
|
|
image = Image.open(image_path).convert("RGB")
|
|
|
|
result = convert_image(format_out, image)
|
|
print(result)
|
|
|
|
if __name__ == "__main__": main(sys.argv)
|