From 752463329e9c7a154c7afe04aa8228f347363d60 Mon Sep 17 00:00:00 2001 From: JISAUAY Date: Mon, 9 Sep 2024 09:59:05 -0500 Subject: [PATCH] fixed some rendering bugs --- fonts/scientifica.ttf | Bin 0 -> 120736 bytes sobel.py | 19 ++++++++++--------- 2 files changed, 10 insertions(+), 9 deletions(-) create mode 100644 fonts/scientifica.ttf diff --git a/fonts/scientifica.ttf b/fonts/scientifica.ttf new file mode 100644 index 0000000000000000000000000000000000000000..1753d31d748d579e8d78fb2f691ce853bc798dda GIT binary patch literal 120736 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

4WujDDguVB>2a8s=?0^4tr2 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⪙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�EqQ|4(Ao{3>quHpCemUNmEl(_m%@Q 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 Na}JqsCd~f~=HIgVDsKP) literal 0 HcmV?d00001 diff --git a/sobel.py b/sobel.py index 32b2c5d..871f000 100644 --- a/sobel.py +++ b/sobel.py @@ -7,10 +7,11 @@ import os from PIL import Image, ImageFilter import pygame as pg -IMAGE_PATH = 'sample-images/engine.PNG' +IMAGE_PATH = 'sample-images/sunflower.jpg' +FONT_PATH = 'fonts/scientifica.ttf' BLUR_STRENGTH_1 = 1 -BLUR_STRENGTH_2 = 2.5 +BLUR_STRENGTH_2 = 1.2 DOG_THRESHOLD = 8 @@ -31,7 +32,7 @@ if not os.path.exists('./debug/') and DEBUG: os.makedirs('./debug') # '█@?OPoci. ' -CHARS = [ +CHARS = list(reversed([ u'█', '@', '?', @@ -42,7 +43,7 @@ CHARS = [ 'i', '.', ' ' -] +])) def main(): @@ -81,7 +82,7 @@ def main(): text_grind_height = h / SCALED_HEIGHT pg.init() - font = pg.font.SysFont("Monocraft Medium", 12) + font = pg.font.Font(FONT_PATH, 12) window = pg.display.set_mode((text_grid_width * TEXT_WIDTH, text_grind_height * TEXT_HEIGHT)) y_offset = 0 @@ -127,7 +128,7 @@ def main(): score = histogram[char] most_common = char - rendered_char = font.render(most_common, 1, color_avg) + rendered_char = font.render(str(most_common), True, color_avg) window.blit(rendered_char, (x * TEXT_WIDTH, y * TEXT_HEIGHT)) x_offset += SCALED_WIDTH @@ -144,7 +145,7 @@ def main(): # Draw only the ASCII edges pg.init() - font = pg.font.SysFont("Monocraft Medium", 12) + font = pg.font.Font(FONT_PATH, 12) window = pg.display.set_mode((text_grid_width * TEXT_WIDTH, text_grind_height * TEXT_HEIGHT)) y_offset = 0 @@ -190,7 +191,7 @@ def main(): score = histogram[char] most_common = char - rendered_char = font.render(most_common, 1, color_avg) + rendered_char = font.render(most_common, True, color_avg) window.blit(rendered_char, (x * TEXT_WIDTH, y * TEXT_HEIGHT)) x_offset += SCALED_WIDTH @@ -202,7 +203,7 @@ def main(): pg.quit() - + def subtract_colors(t1: tuple, t2: tuple) -> tuple: