Использование PIL для создания большого изображения из набора меньших изображений приводит к пустому пространству - PullRequest
0 голосов
/ 01 февраля 2019

Я создаю утилиту для создания большой шахматной доски, заполненной случайными фигурами.При создании большого изображения с помощью функции вставки 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 изображение без потери изображений за правыми границами

...