first commit
This commit is contained in:
commit
a389be4d8e
|
@ -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))
|
Loading…
Reference in New Issue