E-Paper-Calendar/Calendar/DesignEntity.py

50 lines
1.7 KiB
Python
Raw Normal View History

from PIL import Image, ImageOps, ImageDraw
2019-04-05 11:37:51 +02:00
from Assets import colors
2019-03-07 21:27:30 +01:00
masking_threshold = 100
class DesignEntity (object):
"""General entity that can be drawn on to a panel design or
other design entities."""
2019-03-07 21:27:30 +01:00
def __init__ (self, size, mask=False, invert_mask=False, color_key=False):
self.size = size
self.pos = (0, 0)
2019-02-28 22:19:33 +01:00
self.mask = mask
self.invert_mask = invert_mask
self.__init_image__()
self.__finished_image__ = False
2019-03-07 21:27:30 +01:00
self.color_key = color_key
2019-04-05 11:37:51 +02:00
def __init_image__ (self, color = colors["bg"]):
rounded_size = (int(self.size[0]),int(self.size[1]))
self.__image__ = Image.new('RGB', rounded_size, color=color)
def get_image (self):
if self.__finished_image__ is False:
self.__finish_image__()
self.__finished_image__ = True
return self.__image__
2019-03-07 21:27:30 +01:00
def draw (self, subimage, pos, mask=False, invert_mask=False, color_key=False):
rounded_pos = (int(pos[0]),int(pos[1]))
2019-02-28 22:19:33 +01:00
img_mask = None
if mask:
2019-03-07 21:27:30 +01:00
img_mask = self.__get_mask__(subimage, invert_mask=invert_mask, color_key=color_key)
self.__image__.paste(subimage, rounded_pos, mask=img_mask)
def draw_design (self, entity):
2019-03-07 21:27:30 +01:00
self.draw(entity.get_image(), entity.pos, entity.mask, entity.invert_mask, entity.color_key)
def draw_image (self, path, pos):
self.draw(Image.open(path), pos)
def __finish_image__ (self):
pass
2019-03-07 21:27:30 +01:00
def __get_mask__ (self, image, invert_mask, color_key):
mask = image.convert('L')
if color_key:
mask = mask.point(lambda p : 255 if p >= masking_threshold else 0)
if invert_mask:
mask = ImageOps.invert(mask)
return ImageOps.invert(mask)