Создание длинного изображения без изменения размера - PullRequest
0 голосов
/ 11 октября 2019

Мне нужно соединить много изображений рядом, но без изменения высоты или ширины любого из них. То есть, это будет просто одно изображение постоянной высоты, но очень большой ширины, так как изображение располагается горизонтально.

Я использовал Python и библиотеку PIL, но то, что я пробовал до сих порсоздает изображение, которое делает все изображения меньше, чтобы объединить их в одно длинное изображение.

Image.MAX_IMAGE_PIXELS = 100000000  # For PIL Image error when handling very large images

imgs = [ Image.open(i) for i in list_of_images ]

widths, heights = zip(*(i.size for i in imgs))
total_width = sum(widths)
max_height = max(heights)

new_im = Image.new('RGB', (total_width, max_height))

# Place first image
new_im.paste(imgs[0],(0,0))

# Iteratively append images in list horizontally
hoffset=0
for i in range(1,len(imgs),1):
    hoffset=imgs[i-1].size[0]+hoffset  # update offset**
    new_im.paste(imgs[i],(hoffset,0))

new_im.save('row.jpg')

В результате я получаю одно изображение, составленное из объединенных изображений в горизонтальном ряду. Это то, что я хочу, за исключением того, что в процессе конкатенации изображения становятся все меньше и меньше. Я хочу, чтобы конечный результат не уменьшал изображения, а создавал изображение из входных изображений с их исходным размером. Таким образом, выходное изображение будет иметь очень большую ширину.

1 Ответ

1 голос
/ 11 октября 2019

Кажется, у вас ошибка при обновлении смещений. Вы должны заменить свой блок итерации на:

imgs = [Image.open(i) for i in list_of_images]
widths, heights = zip(*(i.size for i in imgs))

new_img = Image.new('RGB', (sum(widths), max(heights)))
h_offset = 0
for i, img in enumerate(imgs):
    new_img.paste(img, (h_offset, 0))
    h_offset += img.size[0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...