from PIL import Image, ImageDraw, ImageFont import numpy as np import datetime """Two colors: 1 main color and 1 accent color. These are labeled in the matrix as 1 and 2""" def text_converter(text, height): """Converts a text to a pixel-matrix returns: np.array((16, x))""" font = ImageFont.truetype("verdanab.ttf", 16) size = font.getsize(text) img = Image.new("1",size,"black") draw = ImageDraw.Draw(img) draw.text((0, 0), text, "white", font=font) pixels = np.array(img, dtype=np.uint8) return pixels digits = { 1 : [[0,1,1],[0,0,1],[0,0,1],[0,0,1],[0,0,1]], 2 : [[1,1,1],[0,0,1],[1,1,1],[1,0,0],[1,1,1]], 3 : [[1,1,1],[0,0,1],[1,1,1],[0,0,1],[1,1,1]], 4 : [[1,0,1],[1,0,1],[1,1,1],[0,0,1],[0,0,1]], 5 : [[1,1,1],[1,0,0],[1,1,1],[0,0,1],[1,1,1]], 6 : [[1,1,1],[1,0,0],[1,1,1],[1,0,1],[1,1,1]], 7 : [[1,1,1],[0,0,1],[0,0,1],[0,0,1],[0,0,1]], 8 : [[1,1,1],[1,0,1],[1,1,1],[1,0,1],[1,1,1]], 9 : [[1,1,1],[1,0,1],[1,1,1],[0,0,1],[1,1,1]], 0 : [[1,1,1],[1,0,1],[1,0,1],[1,0,1],[1,1,1]] } ##place of numbers, invariable digit_position = [[3,1], [3,9], [9,1], [9,9]] def time_converter(): """Converts 4-digit time to a pixel-matrix returns: np.array((16, 16))""" time = datetime.datetime.now().strftime("%H%M") pixels = np.zeros((16,16),dtype=np.uint8) time = "0" * (4 - len(str(time))) + str(time) time_split = [int(i) for i in time] for i in range(4): x = digit_position[i][0] y = digit_position[i][1] number = digits[time_split[i]] pixels[x: x + 5, y: y + 3] = np.array(number) return pixels days = np.append(np.zeros((15,16)), np.array([0,1,0,1,0,1,0,1,0,1,0,1,1,0,1,1])).reshape((16,16)) def date_converter(): today = datetime.datetime.today() weekday = datetime.datetime.weekday(today) # size of the reduced array according to weekday size = [2,4,6,8,10,13,16] pixels = days #base color background lrow = np.append(pixels[15,:size[weekday]], [0 for i in range(16 - size[weekday])]) lrow = np.append(np.zeros((15,16)), lrow).reshape((16,16)) pixels += lrow return pixels