Я создаю утилиту для создания большой шахматной доски, заполненной случайными фигурами.При создании большого изображения с помощью функции вставки PIL я всегда теряю некоторые изображения.
Если на доске 1х1, то на ней не будет изображений, если на 2х2, то будет два верхних изображения и одно нижнее левое изображение, но без дна
Глядя на мой код, я понимаю, что он пытается поместить изображение за пределы фона в каждой строке, прежде чем перейти к следующей, но если я изменю его, чтобы перейти только кграниц, а затем перейти к следующей строке, весь крайний правый ряд изображения будет черным пространством, означая, что у меня будет на одно изображение меньше, чем при его программировании.
def create_set(name, quantity):
print(datetime.datetime.now())
pic_list = create_pieces(quantity)
txt_name = name.split('.')[0]
text_file = open(txt_name + '.txt', 'w+')
text_file.write(str(datetime.datetime.now()) + ', ')
for i in range(len(pic_list)):
if i > 0:
text_file.write(',' + str(pic_list[i].split('.')[0]))
else:
text_file.write(str(pic_list[i].split('.')[0]))
text_file.close()
root = math.sqrt(quantity)
background_dimension = int(root * 32)
print(background_dimension)
picture = Image.new('RGB',(background_dimension, background_dimension))
offset = [0, 0]
for i in range(0, len(pic_list), int(root)):
# print(offset)
images = [Image.open(j) for j in pic_list[i:i+int(root)]]
for item in images:
print(offset)
# print(datetime.datetime.now())
if offset[0] < background_dimension:
picture.paste(item, (offset[0], offset[1]))
offset[0] += 32
else:
offset[1] += 32
offset[0] = 0
picture.paste(item, (offset[0], offset[1]))
picture.save(name)
print(datetime.datetime.now())
text_file = open(txt_name + '.txt', 'a')
text_file.write(', ' + str(datetime.datetime.now()))
text_file.close
*Изображение 1008 * 4x4 с потерей изображений за правыми границами
2x2 изображение без потери изображений за правыми границами