diff --git a/examples/debug.py b/examples/debug.py index 284ad1e..765dcb3 100644 --- a/examples/debug.py +++ b/examples/debug.py @@ -1,9 +1,15 @@ from pil2ansi import convert_img, Palettes, Palette from PIL import Image -palettes: list = [Palettes.color, Palettes.grayscale, Palettes.grayscale_inverted, Palettes.ascii] +palettes: list = [ + Palettes.color, + Palettes.grayscale, + Palettes.grayscale_inverted, + Palettes.ascii, +] reset: str = "\033[0m" + def print_palette(palette: Palette): print(f"\nPalette: {palette.__class__.__name__}") if palette.pil_color == "LA": @@ -13,19 +19,27 @@ def print_palette(palette: Palette): print("\n", end="") else: for i in range(256): - print(f"{reset}{palette.pixel_to_color((i, 0, 0, 255), (i, 0, 0, 255))} {reset}", end="") + print( + f"{reset}{palette.pixel_to_color((i, 0, 0, 255), (i, 0, 0, 255))} {reset}", + end="", + ) if (i + 1) % (256 / 4) == 0: print("\n", end="") for i in range(256): - print(f"{reset}{palette.pixel_to_color((0, i, 0, 255), (0, i, 0, 255))} {reset}", end="") + print( + f"{reset}{palette.pixel_to_color((0, i, 0, 255), (0, i, 0, 255))} {reset}", + end="", + ) if (i + 1) % (256 / 4) == 0: print("\n", end="") for i in range(256): - print(f"{reset}{palette.pixel_to_color((0, 0, i, 255), (0, 0, i, 255))} {reset}", end="") + print( + f"{reset}{palette.pixel_to_color((0, 0, i, 255), (0, 0, i, 255))} {reset}", + end="", + ) if (i + 1) % (256 / 4) == 0: print("\n", end="") -for palette in palettes: print_palette(palette) # 2x2 img_2x2: Image.Image = Image.new("RGBA", (2, 2), (255, 0, 0, 255)) @@ -50,19 +64,25 @@ def print_palette(palette: Palette): img_5x7_alpha.putpixel((4, 0), (255, 0, 0, 0)) img_5x7_alpha.putpixel((4, 6), (255, 0, 0, 0)) +for palette in palettes: + print_palette(palette) print("\n2x2") -for palette in palettes: print(convert_img(img_2x2, palette)) +for palette in palettes: + print(convert_img(img_2x2, palette)) print("\n4x4") -for palette in palettes: print(convert_img(img_4x4, palette)) +for palette in palettes: + print(convert_img(img_4x4, palette)) print("\n5x7") -for palette in palettes: print(convert_img(img_5x7, palette)) +for palette in palettes: + print(convert_img(img_5x7, palette)) print("\n4x4 with transparent corners") -for palette in palettes: print(convert_img(img_4x4_alpha, palette)) +for palette in palettes: + print(convert_img(img_4x4_alpha, palette)) print("\n5x7 with transparent corners") -for palette in palettes: print(convert_img(img_5x7_alpha, palette)) - +for palette in palettes: + print(convert_img(img_5x7_alpha, palette)) diff --git a/src/pil2ansi.py b/src/pil2ansi.py index f50c277..7281197 100644 --- a/src/pil2ansi.py +++ b/src/pil2ansi.py @@ -128,7 +128,9 @@ def convert_img( pixel_bg: PIXEL pixel_fg = pixels[i * img.width + j] - pixel_bg = pixels[(i + 1) * img.width + j] if i != img.height - 1 else pixel_fg + pixel_bg = ( + pixels[(i + 1) * img.width + j] if i != img.height - 1 else pixel_fg + ) if alpha == False: pixel_fg = tuple(pixel_fg[:-1] + (255,)) @@ -142,7 +144,9 @@ def convert_img( elif i % 2 == 0: # handle last row if i == img.height - 1: - pixel_bg = tuple(pixel_bg[:-1] + (0,)) # make bg transparent on last row + pixel_bg = tuple( + pixel_bg[:-1] + (0,) + ) # make bg transparent on last row if pixel_fg[-1] == 0 and pixel_bg[-1] == 0: ascii_str += f"{reset_char}{transparent_char}" diff --git a/tests/test_convert_img.py b/tests/test_convert_img.py index 6158c66..38d8123 100644 --- a/tests/test_convert_img.py +++ b/tests/test_convert_img.py @@ -1,6 +1,7 @@ from pil2ansi import convert_img, Palettes from PIL import Image + class TestConvertImg: reset_char: str = "\033[0m" transparent_char: str = f"{reset_char} " @@ -9,8 +10,12 @@ class TestConvertImg: RGBA_red_out: str = f"{reset_char}\033[38;2;255;0;0;48;2;255;0;0m{unicode_upper_char}" RGBA_red_end_row_out: str = f"{reset_char}\033[38;2;255;0;0;48;1m{unicode_upper_char}" - RGBA_red_alpha_upper_out: str = f"{reset_char}\033[38;2;255;0;0;48;1m{unicode_lower_char}" - RGBA_red_alpha_lower_out: str = f"{reset_char}\033[38;2;255;0;0;48;1m{unicode_upper_char}" + RGBA_red_alpha_upper_out: str = ( + f"{reset_char}\033[38;2;255;0;0;48;1m{unicode_lower_char}" + ) + RGBA_red_alpha_lower_out: str = ( + f"{reset_char}\033[38;2;255;0;0;48;1m{unicode_upper_char}" + ) LA_red_out: str = f"{reset_char}\033[38;5;238;48;5;238m{unicode_upper_char}" LA_red_end_row_out: str = f"{reset_char}\033[38;5;238;48;1m{unicode_upper_char}" @@ -22,7 +27,7 @@ class TestConvertImg: end_row_out: str = f"{reset_char}\n" - def test_convert_img_color_2x2(self): + def test_convert_img_color_2x2(self) -> None: img: Image.Image = Image.new("RGBA", (2, 2), (255, 0, 0, 255)) expected_out: str = self.RGBA_red_out * 2 + self.end_row_out out = convert_img(img, Palettes.color) @@ -31,7 +36,7 @@ def test_convert_img_color_2x2(self): assert img.width == 2 assert out == expected_out - def test_convert_img_color_4x4(self): + def test_convert_img_color_4x4(self) -> None: img: Image.Image = Image.new("RGBA", (4, 4), (255, 0, 0, 255)) expected_out: str = (self.RGBA_red_out * 4 + self.end_row_out) * 2 out = convert_img(img, Palettes.color) @@ -40,7 +45,7 @@ def test_convert_img_color_4x4(self): assert img.width == 4 assert out == expected_out - def test_convert_img_color_5x7(self): + def test_convert_img_color_5x7(self) -> None: img: Image.Image = Image.new("RGBA", (5, 7), (255, 0, 0, 255)) expected_out: str = (self.RGBA_red_out * 5 + self.end_row_out) * 3 expected_out += self.RGBA_red_end_row_out * 5 + self.end_row_out @@ -50,7 +55,7 @@ def test_convert_img_color_5x7(self): assert img.width == 5 assert out == expected_out - def test_convert_img_color_alpha_4x4(self): + def test_convert_img_color_alpha_4x4(self) -> None: img: Image.Image = Image.new("RGBA", (4, 4), (255, 0, 0, 255)) img.putpixel((0, 0), (255, 0, 0, 0)) img.putpixel((0, 3), (255, 0, 0, 0)) @@ -58,15 +63,15 @@ def test_convert_img_color_alpha_4x4(self): img.putpixel((3, 3), (255, 0, 0, 0)) expected_out: str = ( - self.RGBA_red_alpha_upper_out - + (self.RGBA_red_out * 2) - + self.RGBA_red_alpha_upper_out + self.RGBA_red_alpha_upper_out + + (self.RGBA_red_out * 2) + + self.RGBA_red_alpha_upper_out + self.end_row_out ) expected_out += ( - self.RGBA_red_alpha_lower_out - + (self.RGBA_red_out * 2) - + self.RGBA_red_alpha_lower_out + self.RGBA_red_alpha_lower_out + + (self.RGBA_red_out * 2) + + self.RGBA_red_alpha_lower_out + self.end_row_out ) out = convert_img(img, Palettes.color, alpha=True) @@ -75,7 +80,7 @@ def test_convert_img_color_alpha_4x4(self): assert img.width == 4 assert out == expected_out - def test_convert_img_color_alpha_5x7(self): + def test_convert_img_color_alpha_5x7(self) -> None: img: Image.Image = Image.new("RGBA", (5, 7), (255, 0, 0, 255)) img.putpixel((0, 0), (255, 0, 0, 0)) img.putpixel((0, 6), (255, 0, 0, 0)) @@ -83,18 +88,15 @@ def test_convert_img_color_alpha_5x7(self): img.putpixel((4, 6), (255, 0, 0, 0)) expected_out: str = ( - self.RGBA_red_alpha_upper_out - + (self.RGBA_red_out * 3) - + self.RGBA_red_alpha_upper_out + self.RGBA_red_alpha_upper_out + + (self.RGBA_red_out * 3) + + self.RGBA_red_alpha_upper_out + self.end_row_out ) - expected_out += ( - (self.RGBA_red_out * 5) - + self.end_row_out - ) * 2 + expected_out += ((self.RGBA_red_out * 5) + self.end_row_out) * 2 expected_out += ( self.transparent_char - + (self.RGBA_red_alpha_lower_out * 3) + + (self.RGBA_red_alpha_lower_out * 3) + self.transparent_char + self.end_row_out ) @@ -105,7 +107,7 @@ def test_convert_img_color_alpha_5x7(self): assert img.width == 5 assert out == expected_out - def test_convert_img_grayscale_2x2(self): + def test_convert_img_grayscale_2x2(self) -> None: img: Image.Image = Image.new("RGBA", (2, 2), (255, 0, 0, 255)) expected_out: str = self.LA_red_out * 2 + self.end_row_out out = convert_img(img, Palettes.grayscale) @@ -114,7 +116,7 @@ def test_convert_img_grayscale_2x2(self): assert img.width == 2 assert out == expected_out - def test_convert_img_grayscale_4x4(self): + def test_convert_img_grayscale_4x4(self) -> None: img: Image.Image = Image.new("RGBA", (4, 4), (255, 0, 0, 255)) expected_out: str = (self.LA_red_out * 4 + self.end_row_out) * 2 out = convert_img(img, Palettes.grayscale) @@ -123,7 +125,7 @@ def test_convert_img_grayscale_4x4(self): assert img.width == 4 assert out == expected_out - def test_convert_img_grayscale_5x7(self): + def test_convert_img_grayscale_5x7(self) -> None: img: Image.Image = Image.new("RGBA", (5, 7), (255, 0, 0, 255)) expected_out: str = (self.LA_red_out * 5 + self.end_row_out) * 3 expected_out += self.LA_red_end_row_out * 5 + self.end_row_out @@ -132,8 +134,8 @@ def test_convert_img_grayscale_5x7(self): assert len(img.getdata()) == 35 assert img.width == 5 assert out == expected_out - - def test_convert_img_grayscale_alpha_4x4(self): + + def test_convert_img_grayscale_alpha_4x4(self) -> None: img: Image.Image = Image.new("RGBA", (4, 4), (255, 0, 0, 255)) img.putpixel((0, 0), (255, 0, 0, 0)) img.putpixel((0, 3), (255, 0, 0, 0)) @@ -141,15 +143,15 @@ def test_convert_img_grayscale_alpha_4x4(self): img.putpixel((3, 3), (255, 0, 0, 0)) expected_out: str = ( - self.LA_red_alpha_upper_out - + (self.LA_red_out * 2) - + self.LA_red_alpha_upper_out + self.LA_red_alpha_upper_out + + (self.LA_red_out * 2) + + self.LA_red_alpha_upper_out + self.end_row_out ) expected_out += ( - self.LA_red_alpha_lower_out - + (self.LA_red_out * 2) - + self.LA_red_alpha_lower_out + self.LA_red_alpha_lower_out + + (self.LA_red_out * 2) + + self.LA_red_alpha_lower_out + self.end_row_out ) out = convert_img(img, Palettes.grayscale, alpha=True) @@ -158,7 +160,7 @@ def test_convert_img_grayscale_alpha_4x4(self): assert img.width == 4 assert out == expected_out - def test_convert_img_grayscale_alpha_5x7(self): + def test_convert_img_grayscale_alpha_5x7(self) -> None: img: Image.Image = Image.new("RGBA", (5, 7), (255, 0, 0, 255)) img.putpixel((0, 0), (255, 0, 0, 0)) img.putpixel((0, 6), (255, 0, 0, 0)) @@ -166,18 +168,15 @@ def test_convert_img_grayscale_alpha_5x7(self): img.putpixel((4, 6), (255, 0, 0, 0)) expected_out: str = ( - self.LA_red_alpha_upper_out - + (self.LA_red_out * 3) - + self.LA_red_alpha_upper_out + self.LA_red_alpha_upper_out + + (self.LA_red_out * 3) + + self.LA_red_alpha_upper_out + self.end_row_out ) - expected_out += ( - (self.LA_red_out * 5) - + self.end_row_out - ) * 2 + expected_out += ((self.LA_red_out * 5) + self.end_row_out) * 2 expected_out += ( self.transparent_char - + (self.LA_red_alpha_lower_out * 3) + + (self.LA_red_alpha_lower_out * 3) + self.transparent_char + self.end_row_out ) @@ -188,7 +187,7 @@ def test_convert_img_grayscale_alpha_5x7(self): assert img.width == 5 assert out == expected_out - def test_convert_img_ascii_2x2(self): + def test_convert_img_ascii_2x2(self) -> None: img: Image.Image = Image.new("RGBA", (2, 2), (255, 0, 0, 255)) expected_out: str = (self.ASCII_red_out * 2 + self.end_row_out) * 2 out = convert_img(img, Palettes.ascii) @@ -197,7 +196,7 @@ def test_convert_img_ascii_2x2(self): assert img.width == 2 assert out == expected_out - def test_convert_img_ascii_4x4(self): + def test_convert_img_ascii_4x4(self) -> None: img: Image.Image = Image.new("RGBA", (4, 4), (255, 0, 0, 255)) expected_out: str = (self.ASCII_red_out * 4 + self.end_row_out) * 3 out = convert_img(img, Palettes.ascii) @@ -206,7 +205,7 @@ def test_convert_img_ascii_4x4(self): assert img.width == 4 assert out == expected_out - def test_convert_img_ascii_5x7(self): + def test_convert_img_ascii_5x7(self) -> None: img: Image.Image = Image.new("RGBA", (5, 7), (255, 0, 0, 255)) expected_out: str = (self.ASCII_red_out * 5 + self.end_row_out) * 3 expected_out += self.ASCII_red_out * 5 + self.end_row_out @@ -216,7 +215,7 @@ def test_convert_img_ascii_5x7(self): assert img.width == 5 assert out == expected_out - def test_convert_img_ascii_alpha_4x4(self): + def test_convert_img_ascii_alpha_4x4(self) -> None: img: Image.Image = Image.new("RGBA", (4, 4), (255, 0, 0, 255)) img.putpixel((0, 0), (255, 0, 0, 0)) img.putpixel((0, 3), (255, 0, 0, 0)) @@ -224,15 +223,12 @@ def test_convert_img_ascii_alpha_4x4(self): img.putpixel((3, 3), (255, 0, 0, 0)) expected_out: str = ( - self.ASCII_alpha_out - + (self.ASCII_red_out * 2) - + self.ASCII_alpha_out - + self.end_row_out - ) - expected_out += ( - (self.ASCII_red_out * 4) + self.ASCII_alpha_out + + (self.ASCII_red_out * 2) + + self.ASCII_alpha_out + self.end_row_out ) + expected_out += (self.ASCII_red_out * 4) + self.end_row_out expected_out += ( self.ASCII_alpha_out + (self.ASCII_red_out * 2) @@ -245,7 +241,7 @@ def test_convert_img_ascii_alpha_4x4(self): assert img.width == 4 assert out == expected_out - def test_convert_img_ascii_alpha_5x7(self): + def test_convert_img_ascii_alpha_5x7(self) -> None: img: Image.Image = Image.new("RGBA", (5, 7), (255, 0, 0, 255)) img.putpixel((0, 0), (255, 0, 0, 0)) img.putpixel((0, 6), (255, 0, 0, 0)) @@ -253,18 +249,15 @@ def test_convert_img_ascii_alpha_5x7(self): img.putpixel((4, 6), (255, 0, 0, 0)) expected_out: str = ( - self.ASCII_alpha_out - + (self.ASCII_red_out * 3) - + self.ASCII_alpha_out + self.ASCII_alpha_out + + (self.ASCII_red_out * 3) + + self.ASCII_alpha_out + self.end_row_out ) - expected_out += ( - (self.ASCII_red_out * 5) - + self.end_row_out - ) * 2 + expected_out += ((self.ASCII_red_out * 5) + self.end_row_out) * 2 expected_out += ( self.ASCII_alpha_out - + (self.ASCII_red_out * 3) + + (self.ASCII_red_out * 3) + self.ASCII_alpha_out + self.end_row_out ) @@ -274,4 +267,3 @@ def test_convert_img_ascii_alpha_5x7(self): assert len(img.getdata()) == 35 assert img.width == 5 assert out == expected_out - diff --git a/tests/test_palettes.py b/tests/test_palettes.py index fc1763c..34d764c 100644 --- a/tests/test_palettes.py +++ b/tests/test_palettes.py @@ -2,12 +2,12 @@ class TestPaletteAscii: - def test_init(self): + def test_init(self) -> None: palette = PaletteAscii() assert palette.pil_color == "LA" assert palette.palette_chars == [".", ",", ":", "+", "*", "?", "%", "@"] - def test_pixel_to_color(self): + def test_pixel_to_color(self) -> None: palette = PaletteAscii() assert palette.pixel_to_color((0, 255), (0, 0)) == "." assert palette.pixel_to_color((255, 255), (0, 0)) == "@" @@ -18,12 +18,12 @@ def test_pixel_to_color(self): class TestPaletteGrayscale: - def test_init(self): + def test_init(self) -> None: palette = PaletteGrayscale() assert palette.pil_color == "LA" assert palette.invert == False - def test_pixel_to_color(self): + def test_pixel_to_color(self) -> None: palette = PaletteGrayscale() assert palette.pixel_to_color((0, 255), (127, 255)) == "\033[38;5;232;48;5;243m" assert palette.pixel_to_color((255, 255), (127, 255)) == "\033[38;5;255;48;5;243m" @@ -31,7 +31,7 @@ def test_pixel_to_color(self): assert palette.pixel_to_color((127, 0), (127, 255)) == "\033[38;1;48;5;243m" assert palette.pixel_to_color((0, 255), (127, 0)) == "\033[38;5;232;48;1m" - def test_pixel_to_char_inverted(self): + def test_pixel_to_char_inverted(self) -> None: palette = PaletteGrayscale(invert=True) assert palette.pixel_to_color((0, 255), (127, 255)) == "\033[38;5;255;48;5;244m" assert palette.pixel_to_color((255, 255), (127, 255)) == "\033[38;5;232;48;5;244m" @@ -41,11 +41,11 @@ def test_pixel_to_char_inverted(self): class TestPaletteColor: - def test_init(self): + def test_init(self) -> None: palette = PaletteColor() assert palette.pil_color == "RGBA" - def test_pixel_to_char(self): + def test_pixel_to_char(self) -> None: palette = PaletteColor() assert (