Skip to content

Commit ab3151c

Browse files
committed
Added support for custom filters
1 parent ff09263 commit ab3151c

File tree

2 files changed

+28
-18
lines changed

2 files changed

+28
-18
lines changed

PyASCII.py

100644100755
Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import os
1111
import re
1212
import argparse
13+
import tomllib
1314

1415
if (not os.path.exists('PyASCII/temp')):
1516
os.makedirs('PyASCII/temp')
@@ -21,6 +22,11 @@
2122
if os.path.isfile(file_path):
2223
os.remove(file_path)
2324

25+
def load_filters():
26+
with open('filters.toml', 'rb') as file:
27+
filters = tomllib.load(file)
28+
return filters
29+
2430
#### Image Tools ####
2531

2632
# Muda a resolução da imagem sem perder a proporção
@@ -37,11 +43,6 @@ def resize_image(image, ref_size):
3743
cols = ref_size
3844
return image.resize((rows, cols), Image.LANCZOS)
3945

40-
# Função para obter um sprite individual
41-
def get_sprite(x, y):
42-
sprite = sprite_sheet_image.crop((x, y, x + sprite_width, y + sprite_height))
43-
return sprite
44-
4546
# Transformar o valor do pixel de 0 a 255 em 0 a 16
4647
def pixel_value_to_index(pixel_value):
4748
return int((pixel_value / 255) * 16)
@@ -94,17 +95,14 @@ def salvar_frames(frames, output_path, fps):
9495
video.release()
9596

9697
def load_sprites(sprite_sheet_image, sprite_width, sprite_height, monochrome_filter):
98+
# Função para obter um sprite individual
99+
def get_sprite(x, y):
100+
sprite = sprite_sheet_image.crop((x, y, x + sprite_width, y + sprite_height))
101+
return sprite
102+
97103
sheet_width, sheet_height = sprite_sheet_image.size
98-
filters = {"Orange": ((252, 176, 32), (10, 6, 3)),
99-
"Capuccino":((200, 185, 150), (61, 49, 40)),
100-
"Brat": ((137, 205, 0), (0, 0, 0)),
101-
"Fairy": ((174, 255, 223), (90, 84, 117)),
102-
"Bloody": ((255, 42, 0), (43, 12, 0)),
103-
"Lavender": ((196, 167, 231), (35, 33, 54)),
104-
"Cyan": ((0, 204, 255), (0, 34, 43)),
105-
"Vapor": ((250, 185, 253), (75, 123, 222)),
106-
"Matrix": ((0,255,0), (0,39,6))}
107-
104+
filters = load_filters()
105+
108106
if monochrome_filter != None:
109107
if monochrome_filter not in filters:
110108
print(f"[ KeyError ] '{monochrome_filter}' is not recognized as a filter!")
@@ -114,9 +112,9 @@ def load_sprites(sprite_sheet_image, sprite_width, sprite_height, monochrome_fil
114112
for x in range(0, sheet_width):
115113
pixel_value = sprite_sheet_image.getpixel((x, y))
116114
if pixel_value == (255, 255, 255, 255):
117-
sprite_sheet_image.putpixel((x, y), filters[monochrome_filter][0])
115+
sprite_sheet_image.putpixel((x, y), tuple(filters[monochrome_filter][0]))
118116
else:
119-
sprite_sheet_image.putpixel((x, y), filters[monochrome_filter][1])
117+
sprite_sheet_image.putpixel((x, y), tuple(filters[monochrome_filter][1]))
120118

121119
sprites = []
122120
for y in range(0, sprite_sheet_image.height, sprite_height):
@@ -253,7 +251,7 @@ def parse_arguments():
253251

254252
parser.add_argument('-r', '--resolution', metavar='RES', default=720, type=int, help='Sets the resolution of the output image.')
255253
parser.add_argument('-f', '--filter', metavar='FILTER', default=None,
256-
choices=["Orange", "Capuccino", "Brat", "Fairy", "Bloody", "Lavender", "Cyan", "Vapor", "Matrix"], help='Applies a filter to the output.')
254+
choices=list(load_filters().keys()), help='Applies a filter to the output.')
257255
parser.add_argument('-m', '--media', metavar='MEDIA', required=True, help='Specifies the image/video to be used as input.')
258256
parser.add_argument("-c", "--contrast", action='store_true', help='Increases image contrast.')
259257
parser.add_argument("-o", "--output", metavar="PATH", default=None, help='Changes the output path.')

filters.toml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# Filter Format
2+
# Filter_name = [[RGB], [RGB]]
3+
4+
Orange = [[252, 176, 32], [10, 6, 3]]
5+
Capuccino = [[200, 185, 150], [61, 49, 40]]
6+
Brat = [[137, 205, 0], [0, 0, 0]]
7+
Fairy = [[174, 255, 223], [90, 84, 117]]
8+
Bloody = [[255, 42, 0], [43, 12, 0]]
9+
Lavender = [[196, 167, 231], [35, 33, 54]]
10+
Cyan = [[0, 204, 255], [0, 34, 43]]
11+
Vapor = [[250, 185, 253], [75, 123, 222]]
12+
Matrix = [[0, 255, 0], [0, 39, 6]]

0 commit comments

Comments
 (0)