This commit is contained in:
Ace 2020-11-11 11:08:31 +01:00
parent 7cc109111f
commit 2a2ad18a03
2 changed files with 49 additions and 36 deletions

View File

@ -1,16 +1,17 @@
from PIL import Image
import numpy
module_name = 'inkycal_agenda'
image1_path = "/home/pi/Desktop/cal.png"
image2_path = "/home/pi/Desktop/cal2.png"
output_file = "/home/pi/Desktop/merged.png"
def merge(module_name, out_filename):
def merge(image1, image2, out_filename):
"""Merge black pixels from image2 into image 1
module_name = name of the module generating the image
out_filename = what name to give to the finished file
"""
im1_name, im2_name = module_name+'.png', module_name+'_colour.png'
im1_name, im2_name = image1_path, image2_path
im1 = Image.open(im1_name).convert('RGBA')
im2 = Image.open(im2_name).convert('RGBA')
@ -25,7 +26,7 @@ def merge(module_name, out_filename):
im1.paste(im2, (0,0), im2)
im1.save(out_filename+'.png', 'PNG')
merge(module_name, module_name+'2')
merge(image1_path, image2_path, output_file)
print('Done')

View File

@ -103,35 +103,41 @@ class Calendar(inkycal_module):
im_colour = Image.new('RGB', size = im_size, color = 'white')
# Allocate space for month-names, weekdays etc.
month_name_height = int(self.height*0.1)
weekdays_height = int(self.height*0.05)
month_name_height = int(im_height * 0.1)
weekdays_height = int(im_height * 0.05)
logger.debug((f"month_name_height: {month_name_height}"))
logger.debug((f"weekdays_height: {weekdays_height}"))
if self.show_events == True:
calendar_height = int(self.height*0.6)
events_height = int(self.height*0.25)
logger.debug('calendar-section size: {0} x {1} px'.format(
im_width, calendar_height))
logger.debug('events-section size: {0} x {1} px'.format(
im_width, events_height))
logger.debug("Allocating space for events")
calendar_height = int(im_height * 0.6)
events_height = int(im_height * 0.25)
logger.debug(f'calendar-section size: {im_width} x {calendar_height} px')
logger.debug(f'events-section size: {im_width} x {events_height} px')
else:
calendar_height = self.height - month_name_height - weekday_height
logger.debug('calendar-section size: {0} x {1} px'.format(
im_width, calendar_height))
logger.debug("Not allocating space for events")
calendar_height = im_height - month_name_height - weekday_height
logger.debug(f'calendar-section size: {im_width} x {calendar_height} px')
# Create grid and calculate icon sizes
# Create a 7x6 grid and calculate icon sizes
calendar_rows, calendar_cols = 6, 7
icon_width = im_width // calendar_cols
icon_height = calendar_height // calendar_rows
logger.debug(f"icon_size: {icon_width}x{icon_height}px")
# Calculate spacings for calendar area
x_spacing_calendar = int((im_width % calendar_cols) / 2)
y_spacing_calendar = int((im_height % calendar_rows) / 2)
logger.debug((f"x_spacing_calendar: {x_spacing_calendar}"))
logger.debug((f"y_spacing_calendar :{y_spacing_calendar}"))
# Calculate positions for days of month
grid_start_y = (month_name_height + weekdays_height + y_spacing_calendar)
grid_start_x = x_spacing_calendar
grid = [(grid_start_x + icon_width*x, grid_start_y + icon_height*y)
grid_coordinates = [(grid_start_x + icon_width*x, grid_start_y + icon_height*y)
for y in range(calendar_rows) for x in range(calendar_cols)]
weekday_pos = [(grid_start_x + icon_width*_, month_name_height) for _ in
@ -148,12 +154,8 @@ class Calendar(inkycal_module):
weekstart = now.shift(days = - now.isoweekday())
# Write the name of current month
write(
im_black,
(x_spacing_calendar,0),
(self.width, month_name_height),
str(now.format('MMMM',locale=self.language)),
font = self.font,
write(im_black, (0,0),(im_width, month_name_height),
str(now.format('MMMM',locale=self.language)), font = self.font,
autofit = True)
# Set up weeknames in local language and add to main section
@ -174,21 +176,27 @@ class Calendar(inkycal_module):
# Create a calendar template and flatten (remove nestings)
flatten = lambda z: [x for y in z for x in y]
calendar_flat = flatten(cal.monthcalendar(now.year, now.month))
#logger.debug(f" calendar_flat: {calendar_flat}")
# Map days of month to co-ordinates of grid -> 3: (row2_x,col3_y)
grid = {}
for i in calendar_flat:
if i != 0:
grid[i] = grid_coordinates[calendar_flat.index(i)]
#logger.debug(f"grid:{grid}")
# remove zeros from calendar since they are not required
calendar_flat = [num for num in calendar_flat if num != 0]
# Add the numbers on the correct positions
for i in range(len(calendar_flat)):
if calendar_flat[i] not in (0, int(now.day)):
write(
im_black,
grid[i],
(icon_width,icon_height),
str(calendar_flat[i]),
font = self.num_font, fill_height = 0.5
)
for number in calendar_flat:
if number != int(now.day):
write(im_black, grid[number], (icon_width, icon_height),
str(number), font = self.num_font, fill_height = 0.5)
# Draw a red/black circle with the current day of month in white
icon = Image.new('RGBA', (icon_width, icon_height))
current_day_pos = grid[calendar_flat.index(now.day)]
current_day_pos = grid[int(now.day)]
x_circle,y_circle = int(icon_width/2), int(icon_height/2)
radius = int(icon_width * 0.2)
ImageDraw.Draw(icon).ellipse(
@ -211,9 +219,13 @@ class Calendar(inkycal_module):
line_spacing)
# generate list of coordinates for each line
event_lines = [(0, grid[-1][1] + int(events_height/max_event_lines*_))
events_offset = im_height - events_height
event_lines = [(0, events_offset + int(events_height/max_event_lines*_))
for _ in range(max_event_lines)]
#logger.debug(f"event_lines {event_lines}")
# timeline for filtering events within this month
month_start = arrow.get(now.floor('month'))
month_end = arrow.get(now.ceil('month'))
@ -244,7 +256,7 @@ class Calendar(inkycal_module):
for days in days_with_events:
draw_border(
im_colour,
grid[calendar_flat.index(days)],
grid[days],
(icon_width, icon_height),
radius = 6,
thickness= 1,