Spaces:
Runtime error
Runtime error
#!/usr/bin/env python3 | |
"""Assembles images into a grid.""" | |
import argparse | |
import math | |
import sys | |
from PIL import Image | |
def main(): | |
p = argparse.ArgumentParser(description=__doc__) | |
p.add_argument('images', type=str, nargs='+', metavar='image', | |
help='the input images') | |
p.add_argument('--output', '-o', type=str, default='out.png', | |
help='the output image') | |
p.add_argument('--nrow', type=int, | |
help='the number of images per row') | |
args = p.parse_args() | |
images = [Image.open(image) for image in args.images] | |
mode = images[0].mode | |
size = images[0].size | |
for image, name in zip(images, args.images): | |
if image.mode != mode: | |
print(f'Error: Image {name} had mode {image.mode}, expected {mode}', file=sys.stderr) | |
sys.exit(1) | |
if image.size != size: | |
print(f'Error: Image {name} had size {image.size}, expected {size}', file=sys.stderr) | |
sys.exit(1) | |
n = len(images) | |
x = args.nrow if args.nrow else math.ceil(n**0.5) | |
y = math.ceil(n / x) | |
output = Image.new(mode, (size[0] * x, size[1] * y)) | |
for i, image in enumerate(images): | |
cur_x, cur_y = i % x, i // x | |
output.paste(image, (size[0] * cur_x, size[1] * cur_y)) | |
output.save(args.output) | |
if __name__ == '__main__': | |
main() | |