From a389be4d8e51d9f1b719ffd1932ea69c8fd4c645 Mon Sep 17 00:00:00 2001 From: smallsolar Date: Thu, 21 Dec 2023 09:03:17 +0000 Subject: [PATCH] first commit --- search.py | 108 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 search.py diff --git a/search.py b/search.py new file mode 100644 index 0000000..dae7eda --- /dev/null +++ b/search.py @@ -0,0 +1,108 @@ +import os, sys +import logging +try: + from PIL import Image + import hitherdither + enabled = True +except: + logging.warning("Unable to load PIL or hitherdither, disabling thumbnailer") + enabled = False + +DEFAULT_IMAGE_DIR = "images" +DEFAULT_DITHER_DIR = "dithers" +DEFAULT_THRESHOLD = [96, 96, 96] # this sets the contrast of the final image, rgb +DEFAULT_TRANSPARENCY= False +DEFAULT_TRANSPARENT_COLOR = [(125,125,125)] +DEFAULT_DITHER_PALETTE = [(25,25,25), (75,75,75),(125,125,125),(175,175,175),(225,225,225),(250,250,250)] # 6 tone palette\ +DEFAULT_RESIZE_OUTPUT = True +DEFAULT_MAX_SIZE = (800,800) + +def resize_image(img): + + width, height = img.size + outcome = 0 + + if width > 800 or height > 800: + percentage = 0.5 + resized_dimensions = (int(width * percentage), int(height * percentage)) + img_resized = img.resize(resized_dimensions) + outcome = 0 + else: + img_resized = img + outcome = 1 + + return img_resized, outcome + +jpg_count = 0 +png_count = 0 +other_count = 0 + +for root, dirs, files in os.walk("/home/mastodon/live/public/system", topdown=False): + for name in files: + img_file_dir = os.path.join(root, name) + logging.info(img_file_dir) + file_size = int(os.path.getsize(img_file_dir)) + +# if img_file_dir[-3:] == 'jpg' and file_size > 10: + if file_size > 500 and img_file_dir[-3:] != 'mp4': + + try: + + if img_file_dir[-3:] == 'jpg' or img_file_dir[-4:] == 'jpeg': + img= Image.open(img_file_dir) + pal = list(img.getextrema()) + logging.info('jpg pal: {}'.format(pal)) + img_resized, outcome = resize_image(img) + if len(pal) > 2: + jpg_count = jpg_count + 1 + palette = hitherdither.palette.Palette(DEFAULT_DITHER_PALETTE) + threshold = DEFAULT_THRESHOLD + img_dithered = hitherdither.ordered.bayer.bayer_dithering(img_resized, palette, threshold, order=8) #see hither dither documentation for different dithering algos + new_img = img_dithered.convert('L') + new_img.save(img_file_dir, optimize=True, quality=30) + else: + if outcome == 0: + img_resized.save(img_file_dir, optimize=True, quality=30) + else: + img_resized.save(img_file_dir) + + else: + + img= Image.open(img_file_dir).convert('RGB') + + clrs = img.getcolors() + if clrs == None: + logging.info('None') + num_clrs = 11 + else: + num_clrs = len(clrs) + logging.info(num_clrs) + + if num_clrs > 10: + png_count = png_count + 1 + palette = hitherdither.palette.Palette(DEFAULT_DITHER_PALETTE) + threshold = DEFAULT_THRESHOLD + img_dithered = hitherdither.ordered.bayer.bayer_dithering(img, palette, threshold, order=8) #see hither dither documentation for different dithering algos + + img_resized, outcome = resize_image(img_dithered) + + if img_file_dir[-3:] == 'png': + img_resized.save(img_file_dir, optimize=True) + + else: + if img_resized.mode in ("RGBA", "P"): + img_resized = img_resized.convert("RGB") + img_resized.save(img_file_dir, optimize=True) + + else: + logging.info('Already grayscale') + img.close() + + except KeyboardInterrupt: + logging.info("Keyboard interrupt") + sys.exit() + + except Exception as e: + logging.info("Exception encountered:", e) + +print('jpg: {} png: {}'.format(jpg_count, png_count)) \ No newline at end of file