1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
import os
import math
from PIL import Image, ImageFont, ImageDraw
class ImageList:
def __init__(self):
self.image_thumbnail_scale = (100, 100)
self.images_in_dir = []
self.get_images()
self.image_scale = None
self.get_base_image_scale()
self.x_offset = 0
self.y_offset = 0
self.max_x_size = 96
self.max_y_size = 80
self.image = Image.new('RGBA', self.image_scale, color='#202020')
return
def get_base_image_scale(self):
row_count = math.ceil(len(self.images_in_dir) / math.ceil(math.sqrt(len(self.images_in_dir))))
column_count = math.ceil(len(self.images_in_dir) / row_count)
self.image_scale = (row_count*100, column_count*100)
def get_images(self):
for file in os.listdir(f"./config/images/"):
self.images_in_dir.append(f"{file.split('.')[0]}")
# Return formatted lists
if len(self.images_in_dir) > 0:
self.images_in_dir.sort()
def master_image(self):
for image_name in self.images_in_dir:
image_template = Image.open(f'./config/images/{image_name}.png')
image_scale_x, image_scale_y = image_template.size
image_scale_x_scaled = round(image_scale_x / self.image_thumbnail_scale[0])
image_scale_y_scaled = round(image_scale_y / self.image_thumbnail_scale[1])
while True:
image_scale_x_scaled += round((image_scale_x / self.image_thumbnail_scale[0]))
image_scale_y_scaled += round((image_scale_y / self.image_thumbnail_scale[1]))
if image_scale_x_scaled >= self.max_x_size or image_scale_y_scaled >= self.max_y_size:
if image_scale_x_scaled > self.max_x_size:
image_scale_x_scaled = self.max_x_size
if image_scale_y_scaled > self.max_y_size:
image_scale_y_scaled = self.max_y_size
break
# Determine the centered X of the thumbnails position
centering_image_x = (round(self.image_thumbnail_scale[0] / 2)) - (round(image_scale_x_scaled / 2))
# Place the green in the background
image_green = Image.new('RGBA', (image_scale_x_scaled, image_scale_y_scaled), color='#00FF00')
self.image.paste(image_green, (self.x_offset + centering_image_x, self.y_offset))
# Place the template in the foreground with it's own mask to see the green
image_template = image_template.resize((image_scale_x_scaled, image_scale_y_scaled))
self.image.paste(image_template, (self.x_offset + centering_image_x, self.y_offset), mask=image_template)
d = ImageDraw.Draw(self.image)
font = ImageFont.truetype("./fonts/roboto/Roboto-Regular.ttf", 10)
font_colour = (255, 255, 255, 255)
name_w, name_h = d.textsize(image_name, font=font)
d.text((self.x_offset + (100-name_w)/2, self.y_offset+80), image_name, font=font, fill=font_colour)
self.x_offset += self.image_thumbnail_scale[0]
if self.x_offset >= self.image_scale[0]:
self.x_offset = 0
self.y_offset += self.image_thumbnail_scale[0]
self.image.save('./imagelist.png')
ilist = ImageList().master_image()
|