first commit

This commit is contained in:
smallsolar 2023-12-21 09:03:17 +00:00
commit a389be4d8e
1 changed files with 108 additions and 0 deletions

108
search.py Normal file
View File

@ -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))